具有不同参数的相同命令,使用bash或其他东西的while循环

时间:2011-07-16 12:40:11

标签: bash

我总是对bash感到疯狂,我不明白。 我基本上想要这样做(我没有使用某些特定的语法,它只是为了解释我的问题):

processes_count = 20;

for (i = 0; i < processes_count; i++)
{
  php -f file.php "{$i}-{$processes_count}" &

  proc_id[i] = $!
}

上述循环启动过程。下一个应该让这些过程“永远活着”!

while(true)
{
  foreach(proc_id as id)
  {

    if(!exist(proc_id[id]))
    {
         php -f file.php "{$id}-{$processes_count}" &

         proc_id[id] = $!
    }

  }
  sleep 5
}

如果有人可以帮助将其翻译成bash,python或其他内容,谢谢:)

1 个答案:

答案 0 :(得分:1)

我认为你不能这样做,因为bash没有提供一种方法来'等待任何一个子进程死亡,让我知道它死了哪一个'。最近的方法是wait

wait
wait [jobspec or pid ...]
     

等到每个进程id pid或作业规范指定的子进程   jobspec退出并返回等待的最后一个命令的退出状态。如果一个   给出了工作规范,等待工作中的所有流程。如果没有参数   给定,等待所有当前活动的子进程,以及返回状态   是零。如果jobspec和pid都没有指定shell的活动子进程,   返回状态为127。

这意味着您可以等待特定的孩子死亡,或者您可以等待所有的孩子死亡,但是您无法做您想做的事。

如果您使用Perl或Python,则可以使用wait系统调用来执行此操作。