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

use*_*278 5 linux bash

我正在研究Ubuntu,我想创建一个执行以下操作的bash文件:
在核心上启动一个程序(prog0)1.
等待3秒钟.
然后记录prog0的CPU和内存使用情况信息(我在核心0上使用两个pidstat实例来记录该信息).
然后在核心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 
Run Code Online (Sandbox Code Playgroud)

我不知道如何退出或杀死prog1完成后启动的所有进程.

dog*_*ane 6

加:

trap 'kill $(jobs -p)' EXIT
Run Code Online (Sandbox Code Playgroud)

到脚本的开头.当脚本退出时,这将终止所有后台作业.


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

#!/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
Run Code Online (Sandbox Code Playgroud)

将文件另存为runme.sh.

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

通过执行以下./runme.sh命令运行它:或者在后台运行它:./runme.sh &

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

  • +1 @dogbane 这是我见过的最简单的解决方案。很棒的信息。 (2认同)