内容:
用户向我提供其自定义脚本来运行。这些脚本可以是各种脚本,例如用于启动多个GUI程序,后端服务的脚本。我无法控制脚本的编写方式。这些脚本可以是阻塞类型,即执行等待直到所有子进程(顺序运行的程序)退出
#exaple of blocking script
echo "START"
first_program
second_program
echo "DONE"
或非阻塞类型,即在后台派生子进程并退出类似
#example of non-blocking script
echo "START"
first_program &
second_program &
echo "DONE"
我想达到什么目的?
用户提供的脚本可以是以上两种类型中的任何一种,也可以是两者的组合。我的工作是运行脚本,并等待脚本启动的所有进程退出,然后关闭该节点。如果是阻塞类型,则情况很简单,即获取脚本执行过程的PID,然后等到ps -ef | grep -ef PID不再有条目。非阻塞脚本是给我带来麻烦的脚本
有没有一种方法可以获取通过执行脚本生成的所有子进程的PID列表?任何指针或提示将不胜感激
grep
,只是ps –udummy_user
。另外,查看过程组。
ps
不带任何参数(应该是只bash
和ps
在开头)。在此处启动脚本。完成后,请等待直到ps | wc -l
达到您的期望值。
pid$(foo.sh; echo $!)
将为您提供PID,foo.sh
因此您可以使用ps --ppid
。那行得通吗?