Я пытаюсь определить, когда конкретный процесс работает, на основе его аргументов, на 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 . Найдите kvm_getproc2
.
См. страницу руководства OpenBSD для этого семейства функций.