2014-01-03 4 views
0

Что я в конечном счете пытаюсь сделать, это написать процесс типа демона, который контролирует начало/смерть другого процесса, который мне интересен.Как отслеживать события из других процессов

Я знаю, что у GCD есть тип источника отправки proc, но для этого вам нужен PID, и я не буду знать эту информацию из процесса мониторинга.

Итак, есть ли какие-либо API OSX, которые сообщают вам, какие процессы были запущены/остановлены? Как делают такие программы, как Activity Monitor или «top»?

+0

Вы хотите посмотреть режимы режима root или пользовательского режима? –

ответ

2

По-видимому, из-за их поведения кажется ясным, что Activity Monitor и top являются опросами и не реагируют на асинхронные события. Например, вы можете легко создать ситуацию, в которой недолговечный процесс никогда не появляется в top или Activity Monitor. Разумеется, если бы существовал механизм, управляемый событиями, то системные инструменты могли бы использовать его (по крайней мере, Activity Monitor, который является OSX-специфичным, верхний может быть слишком общим BSD, но независимо.)

dtrace имеет крючки, которые запускаются для событий exec, а fs_usage также имеет возможность регистрировать события exec/spawn, но для обоих из них требуются привилегии root, и поэтому они, вероятно, имеют доступ к средствам, которые top и Activity Monitor этого не делают.

Если вы используете пробел в пользовательском пространстве, вы можете рассмотреть приложение для пользовательского пространства, которое связывается с kext или что-то в этом роде.

Смежные вопросы