是否可以在shell脚本中创建一个非子进程?

时间:2013-05-06 15:34:34

标签: linux shell fork multiprocessing

我在Github上使用shell process pool API作为脚本,如下所示

    function foobar()
    {
       mytask($1);
    }

    job_pool_init 100 0
    tcpdump -i eth0 -w tempcap &            #
    for i in `seq 1 4`;do
      mesg="hello"$i
      job_pool_run foobar $mesg
      sleep 5
    done

    job_pool_wait
    pkill tcpdump                           #
    echo 'all finish'
    job_pool_shutdown

如果我评论tcpdump行, 然后它正常工作,如预期的那样, 但是当tcpdump线存在时, 在wait中有一个job_pool_wait命令,它等待所有子进程的结束,如果没有这样的tcpdump行,它就是预期的。 但我想捕获一些东西,直到所有子进程完成,所以我必须使用tcpdump。在这个脚本中,tcpdump进程是一个子进程, job_pool_wait也将等待tcpdump进程的结束,这是不期望的。

所以解决方法是让tcpdump不是子进程, 我该怎么做, 或任何其他解决方案? 谢谢!

2 个答案:

答案 0 :(得分:2)

您应该能够在后台的子shell中运行tcpdump

(tcpdump -i eth0 -w tempcap &)

这可以防止它作为脚本的直接后代出现。

答案 1 :(得分:1)

回答你的文字问题,是的,用exec运行命令。但我怀疑那是你真正想要的。

我认为你真正想要的是能够等待特定的pid。 wait命令采用可选的pid。这一轮需要检查何时等待返回刚刚终止的进程是否是您感兴趣的进程,如果不是则再次等待。