将PID写入文件并像这样启动应用程序:
pidFile=...( app ; rm $pidFile ; ) &pid=$!echo $pid > $pidFile( sleep 60 ; if [[ -e $pidFile ]]; then killChildrenOf $pid ; fi ; ) &killerPid=$!wait $pidkill $killerPid
这将创建另一个hibernate超时的进程,如果尚未完成,则终止该进程。
如果该过程完成得更快,则将删除PID文件,并终止终止进程。
killChildrenOf是一个脚本,可获取所有进程并杀死某个PID的所有子代。
如果要退出BASH,则可以将PID和超时写入目录,并观察该目录。每分钟左右,阅读条目并检查哪些进程仍然存在以及它们是否超时。
编辑 如果您想知道该进程是否已成功终止,则可以使用
kill -0 $pid
ps -fjww -p 146322 | tail -n 1 | awk '{ print $4 }'在我的情况下:145974。然后,可以将PGID与kill的特殊选项一起使用以终止组中的所有进程:
kill -- -145974



