Описание тега sinningia
В POSIX SH, который не очень хорошо справляется с несколькими фоновыми процессами. Основным инструментом является ожидание
строение, который блокирует до тех пор, пока фоновый процесс завершается. Но ждать
не аргумент, ждет, пока все фоновые процессы вышли, и возвращает статус выхода последней процесс, выход; выход состояния остальных подпроцессов теряется.
Вы можете установить ловушки для сигнала sigchld, который является сигналом, который возникает, когда процесс ребенок выходит. Этот код выполняется всякий раз, когда подпроцесса. Однако вам не обязательно знать, какой подпроцесс вышел или какой статус возврата. Разные снаряды ведут себя по-разному.
АТТ ksh93 (не МКШ или беспроводным интерфейсам!) единственный среди обычных снарядов, что ведет себя с пользой ловушки сигнала sigchld. Она устанавливает $!
ПИД процесса, который существовал и $?
чтобы статус вернуть.
#!/бин/КШ
процесс ловушка'$! (${подпроцессов[$!]}) вышла с состоянием $?' Детский
верстал -подпроцессы
программа 1 & подпроцессов[$!]='программа 1'
программа 2 & подпроцессов[$!]='программа 2'
ждать
Если вы используете другую оболочку, поместить какой-либо пост-обработки в подпроцесс.
#!/Бен/ш
{ программа 1; Эхе "программа 1 завершен со статусом $?"; } &
{ программа 2; Эхе "программа 2 завершился с состоянием $?"; } &
ждать
Или использовать более способный языков, таких как Perl, питон, Рубин и т. д.