Как PS показывает argv для всех процессов на Mac OS X?

Я пытаюсь определить, когда конкретный процесс работает, на основе его аргументов, на Mac OS X. Может быть несколько процессов, работающих с тем же именем, но только один будет иметь аргументы, которые я ищу. Процессы не принадлежат тому же пользователю, который будет выполнять мой код. Они не будут изменять свой argv всегда.

Команда 'PS' показывает точно информацию, что мне нужно. Но я значительно предпочел бы не должным быть порождать 'PS' и анализировать его вывод.

Я первоначально попробовал решение от этого вопроса, с помощью sysctl, но оказывается, что только работает на процессы, которыми Вы владеете; посмотрите мой другой вопрос для большего количества информации.

Таким образом, как PS получает argv информацию для процессов, принадлежавших другим пользователям?

5
задан Community 23 May 2017 в 11:59
поделиться

2 ответа

В Mac OS X для ps установлен uid 0, с помощью которого он получает информацию для всех процессов. Чтобы получить эту информацию, вы должны работать как root, поэтому вам нужно либо установить uid 0, либо запустить утилиту с помощью sudo.

Лучше всего, вероятно, просто создать ps и проанализировать вывод, даже если вы действительно этого не хотите;)

5
ответ дан 13 December 2019 в 22:05
поделиться

BSD ps (используется в Mac OS X) использует kvm_getargv () для получения аргументов командной строки для процесса.

Вот реальный вызов: исходный код ps . Найдите kvm_getproc2 .

См. страницу руководства OpenBSD для этого семейства функций.

5
ответ дан 13 December 2019 в 22:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: