我正在尝试编写一个简单的 bash 脚本。首先,我编写了另一个 bash 脚本,其中运行两个不同程序的 5 个副本:
#!/bin/bash
./fibonacci1 &
./fibonacci2 &
./fibonacci3 &
./fibonacci4 &
./fibonacci5 &
./factorization1 &
./factorization2 &
./factorization3 &
./factorization4 &
./factorization5 &
程序在无限循环中运行,我想运行它们很长时间,即 10 分钟。我将在我的 minix 机器上运行它们并收集一些关于我的调度程序的数据。问题是,我如何编写一个 bash 脚本来杀死所有 10 个带有 SIGINT 的程序?
最佳答案
使用数组捕获后台 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[@]}"
关于linux - 长时间后如何通过 bash 脚本 SIGINT 多个后台程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27882204/