在shell中运行进程池

Modified on: Sat, 06 Apr 2019 00:00:02 +0800

我正在寻找一种简单的方法,可以使用一个命令同时运行N选定的进程。当我退出ctrl+c时,它应该将所有输出放在我的终端上并关闭所有输出。是否有任何现有应用程序可以执行此操作?

我正在考虑像exec_many 10 foo之类的东西 - 它应该保持10 foo的运行并重新生成任何死亡。

作者:viraptor

最佳答案

我不知道有哪一个,但是你可以在没有太多工作的情况下用Bash做到这一点。我会将每个foo进程放在一个进程组中。然后,您可以在父代中捕获SIGINT并使用kill -pgid(在进程组编号之前为负)终止进程组。您也可以将它们作为作业启动。所以他们都马上跑了(很多)。最后,你可以每隔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

你也可以在Pythton for Unix和Linux System Adminsitration的“Proccesses and Concurrency”部分找到类似的东西。

作者:,Kyle Brandt

相关问答

添加新评论