Вы можете использовать strace
, который отслеживает сигналы и системные вызовы. Следующая команда ждет, пока программа не будет сделано, то печатает код выхода:
$ strace -e none -e exit_group -p $PID # process calls exit(1)
Process 23541 attached - interrupt to quit
exit_group(1) = ?
Process 23541 detached
$ strace -e none -e exit_group -p $PID # ^C at the keyboard
Process 22979 attached - interrupt to quit
--- SIGINT (Interrupt) @ 0 (0) ---
Process 22979 detached
$ strace -e none -e exit_group -p $PID # kill -9 $PID
Process 22983 attached - interrupt to quit
+++ killed by SIGKILL +++
сигналы от ^Z
, fg
и kill -USR1
получить отпечатанные тоже. В любом случае вам нужно будет использовать sed
, если вы хотите использовать код выхода в сценарии оболочки.
Если это слишком много кода оболочки, вы можете использовать program I hacked together in C a назад. Он использует ptrace()
, чтобы поймать сигналы и коды выхода из pids. (Он имеет грубые края и может не работать во всех ситуациях.)
Надеюсь, что это поможет!
Да. Но хотелось добавить, что вы можете ждать только кода выхода pid, если этот pid является одним из ваших детей. –
А, спасибо @Apprentice Queue, я этого не знал. –
Это работает только в оболочке, из которой был вызван исходный процесс; а не для произвольного процесса. –