如何检查后台作业是否还活着? (重击)

问题描述 投票:14回答:5

我有以下bash脚本,我们可以称其为script1.sh

#!/bin/bash

exec ./script2.sh &

sleep 5

if job1 is alive then #<--- this line is pseudo-code!
    exec ./script3.sh &
    wait
fi

可以看出,脚本将script2.sh作为后台作业执行,然后等待5秒钟(因此script2.sh可以执行一些初始化工作)。如果初始化成功,则script2.sh作业仍将保持活动状态,在这种情况下,我还想同时启动script3.sh。如果没有,我只想退出。

但是,我不知道如何检查第一个作业是否还活着,因此要检查伪代码行。那么,应该用什么代替呢?

bash shell process background jobs
5个回答
13
投票
ps的退出状态,以确定该特定PID是否仍在进程列表中。例如:

sleep 30 & if ps -p $! >&-; then wait $! else jobs fi


10
投票
./script2 & myPid=$! sleep 5 if kill -0 "$myPid"; then script3 & wait fi

7
投票
if jobs %%; then exec ./script3.sh & wait fi

[jobs %%打印最近的后台进程的作业ID(“当前作业”),如果成功则返回0,否则返回1。


5
投票
#!/bin/bash ./script2.sh& pid1=$! if kill -0 $pid1; then ./script3.sh& pid3=$! wait fi

0
投票
© www.soinside.com 2019 - 2024. All rights reserved.