我正在研究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完成时启动的所有进程。
答案 0 :(得分: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
完成后,脚本将退出,它将终止它启动的所有后台进程。
答案 1 :(得分: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个进程,并且不会违反应用程序死机的规则,否则该规则会使容器崩溃
致敬