Bash linux:并行启动多个程序,完成后停止所有程序

我在Ubuntu上工作,我想创build一个bash文件来做这些事情:
在核心1上启动一个程序(prog0)。
等待3秒钟。
然后loggingprog0的CPU和内存使用情况的信息(我使用核心0上的两个pidstat实例来logging这些信息)。
然后在核心0上启动另一个程序(prog1)。
当prog1完成(我认为prog1自动退出),我想退出所有以前的过程(prog0和两个pidstat)。

taskset -c 1 prog0 -option0 & sleep 3 taskset -c 0 pidstat 1 -C prog0 -u > log2 & taskset -c 0 pidstat 1 -C prog0 -r > log3 & taskset -c 0 prog1 -option1 > log1 

我不知道如何退出或终止prog1完成时启动的所有进程。

加:

 trap 'kill $(jobs -p)' EXIT 

到您的脚本的开始。 这将在您的脚本退出时终止所有后台作业。


要创建脚本,请打开一个新文件并将以下内容粘贴到其中:

 #!/bin/bash trap 'kill $(jobs -p)' EXIT taskset -c 1 prog0 -option0 & sleep 3 taskset -c 0 pidstat 1 -C prog0 -u > log2 & taskset -c 0 pidstat 1 -C prog0 -r > log3 & taskset -c 0 prog1 -option1 > log1 

将文件保存为runme.sh

使其可执行: chmod +x runme.sh

运行: ./runme.sh或在后台运行: ./runme.sh &

现在,当最后一个命令taskset -c 0 prog1 -option1 > log1完成时,脚本将退出,并且将taskset -c 0 prog1 -option1 > log1它启动的所有后台进程。