首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >经过很长一段时间后,如何通过bash脚本来实现多个后台程序?

经过很长一段时间后,如何通过bash脚本来实现多个后台程序?
EN

Stack Overflow用户
提问于 2015-01-10 23:17:15
回答 2查看 177关注 0票数 0

我想写一个简单的bash脚本。首先,我编写了另一个bash脚本,运行两个不同程序的5个副本:

代码语言:javascript
复制
#!/bin/bash
./fibonacci1 &
./fibonacci2 &
./fibonacci3 &
./fibonacci4 &
./fibonacci5 &
./factorization1 &
./factorization2 &
./factorization3 &
./factorization4 &
./factorization5 &

程序在无限循环中运行,我想长时间运行它们,即10分钟。我将在我的minix机器上运行它们,并收集一些关于我的调度程序的数据。问题是,我如何用SIGINT编写一个杀灭所有10个程序的bash纸条?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-10 23:37:10

使用数组捕获后台PID:

代码语言:javascript
复制
#!/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个不同的程序名,这需要付出更多的努力(但不是更多的努力):

代码语言:javascript
复制
#!/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[@]}"
票数 3
EN

Stack Overflow用户

发布于 2015-01-11 00:43:01

或者,您可以使用:

代码语言:javascript
复制
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

这限制了一些冗余,但如果在第一个命令和最后一个命令之间调用其他命令(这不应该发生),则可能会造成麻烦。

适用于你的问题:

代码语言:javascript
复制
#!/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 $procs
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27882204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档