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)但是,如果要这样做,为什么不检查流程是否正在运行呢?