我正在Ubuntu上工作,我想创建一个执行以下操作的bash文件:
在核心1上启动一个程序(prog0)。
等待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

我不知道如何退出或终止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完成时,该脚本将退出,并且将终止其启动的所有后台进程。

10-08 18:40