Я бы не советовал ловить SIGCHLD
сигналы.
Более точный способ сделать это - вызвать waitpid
с опцией WNOHANG
. Если он возвращает 0
, вы знаете, что задание с этим конкретным pid все еще выполняется, в противном случае этот процесс завершится, и вы получите его код выхода из параметра status
и распечатаете сообщение соответствующим образом.
Более того, bash не печатает состояние завершения задания во время его завершения, а скорее во время выполнения следующей команды, так что это идеально подходит для waitpid
.
Небольшой недостаток этого подхода заключается в том, что рабочий процесс останется зомби в период между его окончанием и временем, которое вы называете waitpid
, но это, вероятно, не должно иметь значения для оболочки.