vir*_*tor 5 linux process pool
我正在寻找一种简单的方法来N使用一个命令同时运行选定的进程。它应该将所有输出放在我的终端上,并在我退出时关闭所有输出ctrl+c。是否有任何现有的应用程序可以做到这一点?
我在想一些事情exec_many 10 foo- 它应该保持 10foo秒的运行并重生任何死亡的人。
我不知道有什么办法,但是你可以用 Bash 做到这一点,而无需做太多工作。我会将每个 foo 进程放在一个进程组中。然后,您可以在父进程中捕获 SIGINT 并使用kill -pgid(Negative before process group number) 终止进程组。您也可以将它们全部作为作业启动。所以它们都同时运行(几乎)。最后,您可以每 x 秒循环一次作业的输出(在循环中睡眠)并获取计数,如果计数小于 foo 进程的数量,那么您可以启动另一个(可以通过使确保没有停止等)。
粗略的版本可能是这样的:
#!/bin/bash
command=$1
n_job=$2
function kill_jobs {
echo traped
for job in $(jobs -p); do
echo killing $job
kill $job
done
}
trap 'kill_jobs; exit' SIGINT
while true; do
current_jobs=$(jobs -pr)
x=0;
for job in $current_jobs; do
(( x++ ))
done;
jobs_to_run=$(($n_job - $x))
for (( y = 0; y < $jobs_to_run; y++ )); do
$command &
done
x=0
sleep 5
done
Run Code Online (Sandbox Code Playgroud)
您还可以在 Pythton for Unix and Linux System Adminsitration 的“进程和并发”部分找到类似的内容。
| 归档时间: |
|
| 查看次数: |
1703 次 |
| 最近记录: |