3

我在 Github 上使用shell 进程池 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 不是子进程,我该怎么做,或任何其他解决方案?谢谢!</p>

4

2 回答 2

2

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

(tcpdump -i eth0 -w tempcap &)

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

于 2013-05-06T17:28:30.177 回答
1

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

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

于 2013-05-06T17:23:41.293 回答