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

问题描述 投票:5回答:2

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

linux bash
2个回答
6
投票

添加:

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


0
投票

在大多数系统中如何使用xargs这是基本的Linux程序

xargs -P 2 -I {} sh -c 'eval "$1"' - {} <<EOF
LD_LIBRARY_PATH=$HOME/vendor/usr/lib $HOME/vendor/usr/sbin/pgbouncer -v $HOME/vendor/etc/pgbouncer/pgbouncer.ini ; kill -15 $PPID
nameko run --config config.yaml $@ ; kill -15 $PPID
EOF

这样,两个命令都并行运行,直到其中一个死亡后才退出。如果其中一个死亡,它将杀死父PPID,并在那里也杀死其他姐妹作业/处理作业]

我使用它来解决CloudFoundry中的一个问题,以同时启动2个进程,并且不违反规则,即如果应用程序处理终止,则该规则会使容器崩溃;>

answers here致敬

© www.soinside.com 2019 - 2024. All rights reserved.