Я отслеживаю приложение, запустив:
strace -f -y -qq -z -etrace=execve,... -o app.trace ./app
есть ли способ определить, какой процесс породил какой child_process ?
Моя цель — построить граф, который кодирует иерархические отношения (под)процессов для дальнейшего анализа системных вызовов.
РЕДАКТИРОВАТЬ: Вот более конкретный пример: учитывая следующую иерархию процессов:
p1
|
.---.
| |
p2 p3
|
p4
Я определяю, что p2 и p4 запускают интересующие нас системные вызовы, используя strace. Теперь я хотел бы найти ближайшего общего предка, в данном случае p1.
Можно ли создать дамп со всей информацией, используя strace
, или мне нужно использовать параллельно ps
/pstree
?
РЕДАКТИРОВАТЬ2:
Мне не удалось настроить pstree
для решения моей проблемы. pstree
, кажется, дает вам только снимок, и многие из моих процессов очень недолговечны, что делает невозможным надежный отлов их всех путем многократного вызова pstree
.
EDIT3: я заметил следующие записи в моей трассировке:
23901 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=23902, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
Процесс 23901
регистрирует сигнал SIGCHLD
с помощью si_pid=23902
. подразумевает ли это, что процесс 23901
создал дочерний процесс 23902
?
pstree
уже дает результат, который вы стремитесь получить, написав утилиту самостоятельно. Проверьте это подробно. - person Azeem   schedule 18.07.2018fork
. - person Gaetano   schedule 18.07.2018fork
, создает ли оно дочерние процессы другим способом? (например:clone
) - person user803422   schedule 21.11.2018