В Linux даны два процесса с известными pIds
, один из которых является родителем другого,
Можно ли узнать, ожидает ли родительский процесс завершения дочернего процесса?
Спасибо
Проверьте родительский стек ядра и / или 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).
Поэтому это работает только с простыми линейными процессами. Для всего остального вам придется проверить исходный код или что-то подобное.