Как посмотреть поддерево процесса?

Я работаю над инструментом покрытия кода. Контролируемые программы могут порождать подпроцессы, которые также должны быть покрыты. Дерево процессов может быть сложным и включать в себя не покрываемые процессы. Использование покрытия кода не должно заставлять разработчика изменять покрываемый инструмент (он может не иметь контроля над всем этим). У меня есть текущее решение для обработки порожденных процессов: оно исправляет среду и пытается перехватить порожденные процессы, чтобы покрыть их. Это достаточно хорошо, но это обходной путь для решения более глубокой проблемы: мне нужно наблюдать за поддеревом процесса.

Я ищу надежное решение для наблюдения / мониторинга поддерева процессов: обнаружение создания и уничтожения подпроцессов в поддереве (включая демоны / отдельные процессы).

Я ожидаю создать что-то похожее на наблюдатели за файлами, но для процессов. Мои целевые платформы - Linux, Mac и Windows. При необходимости я могу написать собственный код, используя системные вызовы. Покрытый код находится в Javascript (Node.js), но такой наблюдатель процессов недоступен в Node. Решение может использовать системные API.

Для меня это новая проблемная область, и я не очень хорошо знаком с инструментами, доступными в этой области. Прежде всего, я хотел бы знать, возможен ли такой наблюдатель с учетом существующих системных API. Если возможно, можно ли иметь приблизительные указатели на соответствующие API?

Моя основная система использует Linux, я знаю, что порождение процессов реализовано с помощью системных вызовов, и что я могу заглянуть в /proc, чтобы получить информацию о запущенных процессах. Для Linux у меня есть два текущих решения:

  1. Наблюдатель за файлами на /proc, но я не уверен, насколько он будет надежным, особенно если процессы недолговечны (это также исключает опрос).
  2. Модуль ядра для перехвата системных вызовов? Это слишком тяжеловесно и навязчиво для инструмента покрытия кода. Текущее решение достаточно хорошее, но доведение его до «надежного» должно быть возможным без излишнего возмущения системы.

Заранее благодарю за любую помощь

Для Windows см. docs.microsoft.com/en-us/sysinternals/downloads/…

xmojmr 12.08.2018 08:15

@xmojmr Спасибо за ссылку. Похоже, это инструмент с графическим интерфейсом, а не API, предоставляющий эмиттеры событий. Исходный код может быть интересным, но я не могу его найти. В моих «часах» есть программирование, означающее «подписаться на события» (а не «смотреть своими глазами», означающее; D)

Demurgos 12.08.2018 10:12

Альтернатива Process Explorer с исходным кодом: processhacker.sourceforge.io

xmojmr 13.08.2018 12:19
0
3
54
0

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