我使用来自this帖子答案的shell脚本重新启动进程,如果它退出。我需要从这个脚本开始几个进程,所以我要编写另一个脚本来按顺序启动它们。我想在继续启动订单之前检查每个进程是否已成功启动。我写了一个类似的脚本。
#!/bin/sh
launch() {
exec "$1" "$2" &!
local pid="$(pidof $2)"
echo "PID: $pid"
if [ "$pid" == "" ]; do
return 1
done
return 0
}
launch [looping-script.sh] [process-to-wrap]
exit 0
当我使用launch
的有效参数运行此脚本时,脚本和进程开始并显示在ps
输出中,但$pid
的值为空,函数返回{{ 1}}。但是,如果我将1
参数从等式中取出,就像这样。
[looping-script.sh]
然后#!/bin/sh
launch() {
exec "$1" &!
local pid="$(pidof $1)"
echo "PID: $pid"
if [ "$pid" == "" ]; do
return 1
done
return 0
}
launch [process-to-wrap]
exit 0
匹配进程的$pid
输出值,函数返回ps
。在第一个脚本中我的电话是否有不正确的内容?
0
输出如果它有用:
bash --version
答案 0 :(得分:2)
您没有时间让SELECT DATEFROMPARTS (@CURRENT_YEAR, 1, 1)
开始looping-script.sh
。在检查PID之前尝试添加process-to-wrap
命令。
sleep
答案 1 :(得分:2)
为什么使用pidof
来获取受监控命令的进程ID?如果恰好有多个匹配过程,它将无法执行您想要的操作。 shell可以告诉你它开始的最后一个子shell的PID是什么,例如运行后台管道:
exec "$@" &
local pid=$!
echo "PID: $pid"
另请注意"$@"
,它可以容纳您要启动的命令的任意数量的参数。