linux – 在shell中运行一个进程池

前端之家收集整理的这篇文章主要介绍了linux – 在shell中运行一个进程池前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在寻找一种简单的方法,可以使用一个命令同时运行N个选定的进程.当我用ctrl c退出时,它应该将所有输出放在我的终端上并关闭所有输出.有没有现有的应用程序这样做?

我正在考虑像exec_many 10 foo这样的东西 – 它应该保持10个foos运行并重生任何死亡.

解决方法

我不知道有一个副手,但你可以用 Bash做这个而不需要太多的工作.我会将每个foo进程放在一个进程组中.然后,您可以在父级中捕获SIGINT并使用kill -pgid(进程组编号前的否定)终止进程组.您也可以将它们作为作业启动.所以他们都马上跑了(很多).最后,你可以每隔x秒循环一次作业输出(在循环中休眠)并获得计数,如果计数小于foo进程的数量,则可以激活另一个(可以通过制作得到更多的幻想)确定没有停止等).

粗略的版本可能是这样的:

  1. #!/bin/bash
  2.  
  3. command=$1
  4. n_job=$2
  5.  
  6. function kill_jobs {
  7. echo traped
  8. for job in $(jobs -p); do
  9. echo killing $job
  10. kill $job
  11. done
  12. }
  13.  
  14. trap 'kill_jobs; exit' SIGINT
  15.  
  16. while true; do
  17. current_jobs=$(jobs -pr)
  18. x=0;
  19. for job in $current_jobs; do
  20. (( x++ ))
  21. done;
  22.  
  23. jobs_to_run=$(($n_job - $x))
  24.  
  25. for (( y = 0; y < $jobs_to_run; y++ )); do
  26. $command &
  27. done
  28. x=0
  29. sleep 5
  30. done@H_403_11@
  31. 你也可以在Pythton for UnixLinux System Adminsitration的“Proccesses and Concurrency”部分找到类似的东西.

猜你在找的Linux相关文章