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

StackOverflow https://stackoverflow.com/questions/2568937

  •  24-09-2019
  •  | 
  •  

Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

Вот настоящий вызов: ps исходный код .Найдите код сгенерированного тега.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top