2013-02-28 11 views
4

我正在使用Ubuntu,我想创建一个bash文件来执行以下操作:
在核心1上启动一个程序(prog0)。
等待3秒钟。
然后记录prog0的CPU和内存使用情况(我在内核0上使用两个pidstat实例来记录该信息)。
然后在核心0上启动另一个程序(prog1)。
当prog1结束时(我认为prog1会自动退出),我想退出所有前面的进程(prog0和两个pidstat)。
Bash linux:并行启动多个程序,并在完成时停止所有程序

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完成时启动的所有进程。

+1

使用$!环境变量在执行命令时跟踪PID的情况。那么你可以在结尾处终止-9它们。 – TopGunCoder 2013-02-28 15:29:06

回答

5

地址:

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

使其可执行:./runme.sh或在后台运行:通过执行chmod +x runme.sh

运行它./runme.sh &

现在,当最后一个命令taskset -c 0 prog1 -option1 > log1已经完成,该脚本将退出,它会杀死它开始的所有后台进程。

+0

当我手动退出(ctr + c)时,该命令终止所有进程。我希望有可能在prog1结束时自动退出并终止所有进程。 – user1382278 2013-02-28 20:40:55

+0

您应该在所有其他命令之前将您的命令放入带有'trap'的脚本中,然后运行脚本。 – dogbane 2013-03-01 08:40:25

+0

您的命令位于脚本的顶部,但pidstat是一个循环,不会停止。我需要在prog1结束时自动停止,或者在prog1结束时退出。我不知道是否清楚。 – user1382278 2013-03-01 09:11:10

相关问题