Bash
等待多個程序,如果任何程序退出,則列印退出程式碼
我在這裡想要實現的是,通過腳本我同時執行 3 個不同的自定義應用程序等待,如果任何應用程序退出,通過通知或列印退出程式碼發出警報。
使用系統:Centos 6.8
我想到了 Bash 的
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 done
wait -n
只返回孩子的退出狀態,而不是它的退出狀態PID
。