Подождите несколько процессов, распечатайте код выхода, если какой-либо процесс завершит работу

То, что я пытаюсь достичь здесь, через скрипт, я запускаю 3 разных пользовательских приложения в ожидании одновременно, если какое-либо приложение получает выход, выдает предупреждение через уведомление или код выхода на печать.

Используемая система: Centos 6.8

3 Solutions collect form web for “Подождите несколько процессов, распечатайте код выхода, если какой-либо процесс завершит работу”

Я думал о дочери Баша wait -n , но он не дает вам знать, какой дочерний процесс вышел. Как насчет простого Perl-скрипта?

 #!/usr/bin/perl use strict; use warnings; use POSIX ":sys_wait_h"; sub spawn(@) { my $pid = fork(); die "fork: $!" if not defined $pid; if ($pid == 0) { exec @_ or die "exec: $!"; } return $pid; } # Commands to run my $p1 = spawn '/bin/bash -c "sleep 6; kill $$"'; my $p2 = spawn '/bin/bash -c "sleep 4; exit 4"'; print "spawned PIDs $p1 and $p2\n"; while ((my $child = waitpid(-1, 0)) > 0) { my $code = $? >> 8; my $status = $? & 0xff; printf "child %d finished with exit code %d (status/sig %d)\n", $child, $code, $status; } 

Вы можете использовать wait -n чтобы дождаться выхода первого ребенка, а затем проверить каждый из них, если они все еще работают с kill -0 , например:

 for f in 15 10 15; do sleep $f & PIDS+="$! " ; done ; wait -n ; for f in $PIDS; do if ! kill -0 $f 2> /dev/null ; then echo $f; fi; 

Команда wait в bash имеет параметр -n :

Если -n опция -n , ожидание ожидает завершения любого задания и возврата его статуса выхода.

Это означает, что вы можете сделать

 command1 & command2 & command3 & wait -n printf 'One command exited with exit code %d\n' "$?" 
  • Сохранять временную историю через скрипт
  • Unix-эпоха в миллисекундах
  • Как пронумеровать строку в каждой строке файла
  • Почему эти бомбы вилки-ракеты работают по-разному, и каково значение & в ней?
  • Найдите данные о емкости и самый старый файл в формате Busybox
  • Перемещение подкаталога в новый родительский каталог, где новое имя каталога увеличивается на 1
  • Переменная в команде find задана новой переменной в bash
  • Как получить количество данных между двумя строками с несколькими вхождениями в одном файле
  • Как проверить, установлен ли mysql с помощью сценария bash?
  • Вставить текст в определенные строки файла? со специальными символами
  • Копировать только Конкретный текст файла в другой
  • Interesting Posts

    Ограничение использования журнала транзакций Openldap

    grub2 создать запись меню, чтобы пропустить текущий диск os во время загрузки

    Top не показывает некоторые процессы в зависимости от пользователя

    Почему я не могу обновить ядро ​​Linux в докере?

    Различия между неактивными и отключенными активными и включенными службами

    Плохое выполнение Java-приложения и плохого сервера

    используйте другую версию java для запуска двух программ

    ошибка при загрузке разделяемых библиотек: libboost_thread.so.1.54.0: невозможно открыть файл общих объектов: такой файл или каталог отсутствует

    UDEV-правило: открыть новое окно gnome-terminal на usb-plugin И активировать его для stdin / stdout / stderr?

    Как печатать с iPad на CUPS?

    Велоспорт через * Буферный список * с Cn, Cp

    Как сохранить две версии одного и того же пакета в archlinux?

    Thunderbird: отключить ENTER, открывая все сообщения в потоке

    Ошибка входа в систему Centos

    Предложите мне сервер iscsi, который поддерживает добавление цели во время выполнения

    Linux и Unix - лучшая ОС в мире.