我想写一个简单的bash脚本。首先,我编写了另一个bash脚本,运行两个不同程序的5个副本:
#!/bin/bash
./fibonacci1 &
./fibonacci2 &
./fibonacci3 &
./fibonacci4 &
./fibonacci5 &
./factorization1 &
./factorization2 &
./factorization3 &
./factorization4 &
./factorization5 &程序在无限循环中运行,我想长时间运行它们,即10分钟。我将在我的minix机器上运行它们,并收集一些关于我的调度程序的数据。问题是,我如何用SIGINT编写一个杀灭所有10个程序的bash纸条?
发布于 2015-01-10 23:37:10
使用数组捕获后台PID:
#!/bin/bash
pids=()
./fibonacci1 &
pids+=( $! )
./fibonacci2 &
pids+=( $! )
./fibonacci3 &
pids+=( $! )
./fibonacci4 &
pids+=( $! )
./fibonacci5 &
pids+=( $! )
./factorization1 &
pids+=( $! )
./factorization2 &
pids+=( $! )
./factorization3 &
pids+=( $! )
./factorization4 &
pids+=( $! )
./factorization5 &
pids+=( $! )
sleep 600
kill -2 "${pids[@]}"考虑使用一个循环来开始一些事情,但是由于您运行的是10个不同的程序名,这需要付出更多的努力(但不是更多的努力):
#!/bin/bash
pids=()
for i in {1..5}
do
./fibonacci$i &
pids+=( $! )
done
for i in {1..5}
do
./factorization$i &
pids+=( $! )
done
sleep 600
kill -2 "${pids[@]}"发布于 2015-01-11 00:43:01
或者,您可以使用:
command 1 &
...
command x-1 &
ps > tmp
procs=$(tail -n x tmp | head -n x-1 | cut -d' ' -f2) && rm tmp
sleep 420 && kill -2 $procs这限制了一些冗余,但如果在第一个命令和最后一个命令之间调用其他命令(这不应该发生),则可能会造成麻烦。
适用于你的问题:
#!/bin/bash
./fibonacci1 &
./fibonacci2 &
./fibonacci3 &
./fibonacci4 &
./fibonacci5 &
./factorization1 &
./factorization2 &
./factorization3 &
./factorization4 &
./factorization5 &
ps > tmp
procs=$(tail -n 11 tmp | head -n 10 | cut -d' ' -f2) && rm tmp
sleep 420 && kill -2 $procshttps://stackoverflow.com/questions/27882204
复制相似问题