Answers:
关键是“等待”命令:
#!/bin/bash
/my/process &
/another/process &
wait
echo "All processes done!"
cmd1 & p=$!; cmd2 & q=$!; while sleep 1; do echo still running ; done& wait $p $q; kill $!;
有了wait
您所需的粒度,即可:
sleep 1 &
PID1=$!
sleep 2 &
PID2=$!
wait $PID1
echo 'PID1 has ended.'
wait
echo 'All background processes have exited.'
这是一种实现方法:
launch backgroundprocess &
PROC_ID=$!
while kill -0 "$PROC_ID" >/dev/null 2>&1; do
echo "PROCESS IS RUNNING"
done
echo "PROCESS TERMINATED"
exit 0
wait
更适合那个吗?
您可以使用nohup运行您的进程,并编写Shell脚本以读取nohup用于记录的nohup.out文件。
nohup command &
nohup
不要给写下任何东西nohup.out
;它仅创建文件,然后将命令的输出重定向到该文件。(2)如果命令不产生任何输出,则不会写入任何内容nohup.out
,并且这种想法无法快速发展。(3)即使command
写输出,如何通过监视该输出来告诉输出何时结束?
lsof
来查看是否nohup
仍在使用nohup.out
,但是我同意这是一个非常麻烦的方法。
command
开始运行时,nohup
消失了。(1)是,我要重复一个数字,因为我要重复两年前说的话:nohup
不向写入任何内容nohup.out
。(5)是的,您可以编写一个shell脚本来循环并运行lsof
以查看是否nohup.out
仍然打开。但这将是一个不同的答案。(6)即使您这样做了,也不可靠。如果其他进程打开了nohup.out
文件怎么办?您真的想检查此特定过程是否已nohup.out
打开。(7)但是,如果要这样做,为什么不检查流程是否正在运行呢?