bash - 如何检查后台作业是否存在? ( bash )

标签 bash shell process background jobs

我有以下 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;如果没有,我只想退出。

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

最佳答案

您可以使用 $! 获取最近后台作业的 PID。然后您可以检查 ps 的退出状态以确定该特定 PID 是否仍在进程列表中。例如:

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

关于bash - 如何检查后台作业是否存在? ( bash ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11239466/

相关文章:

c - 如何让父进程等待所有子进程完成?

linux - 向流程组的所有成员发送信号的最佳方式是什么?

node.js - cucumber 测试失败,但 travis build 仍然通过

arrays - 具有双for循环的bash脚本可以访问数组名称

linux - 使用另一个命令进行管道传输时如何读取命令的返回码

bash - 计算在线 session 的总时间

c - shmget 不工作

linux - 删除句点后的第一个大写单词

linux - 通过 ssh 命令将内容添加到 .js 文件的末尾

xmlstarlet - 删除一个 xml 元素 - shell 脚本