Проверьте родительский стек ядра и / или wchan («канал ожидания»)
$ ps -o pid,stat,wchan:24,command 1978243 PID STAT WCHAN COMMAND 1978243 Ss wait bash $ cat /proc/1978243/wchan do_wait $ sudo cat /proc/1978243/stack [<ffffffff8108008d>] do_wait+0x1cd/0x260 [<ffffffff810812ab>] SyS_wait4+0x7b/0xf0 [<ffffffff815f7cf2>] entry_SYSCALL_64_fastpath+0x1a/0xa4 [<ffffffffffffffff>] 0xffffffffffffffff
Это показывает, находится ли процесс внутри системного вызова ядра - если он показывает wait
системный вызов, это самый распространенный способ ожидания дочернего процесса.
Обратите внимание, что многие процессы, основанные на событиях , не используют wait()
вызов в течение длительного времени - вместо этого они вместо этого ждут poll()
, пока не будет получено какое-либо событие (которое может быть или не быть событием SIGCHLD).
Поэтому это работает только с простыми линейными процессами. Для всего остального вам придется проверить исходный код или что-то подобное.