Как ps показывает argv для всех процессов в Mac OS X? - PullRequest
5 голосов
/ 03 апреля 2010

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

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

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

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

Ответы [ 2 ]

5 голосов
/ 03 апреля 2010

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

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

5 голосов
/ 03 апреля 2010

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

Вот фактический вызов: исходный код * 100 *.Поиск kvm_getproc2.

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

...