我在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行在那里时,在job_pool_wait
有一个wait
命令,等待所有subprocess的结束,如果没有这样一个tcpdump行,这是预期的。 但是我想捕获所有的subprocess,所以我必须使用tcpdump。 在这个脚本中,tcpdump进程是一个subprocess, job_pool_wait
也会等待tcpdump进程结束,这是不可预料的。
所以一个解决scheme是使tcpdump不是一个subprocess,我该怎么做,或者任何其他解决scheme? 谢谢!
你应该可以在后台运行一个子shell的tcpdump
:
(tcpdump -i eth0 -w tempcap &)
这应该防止它出现作为你的脚本的直接后裔。
回答你的字面问题,是的,用exec运行命令。 但我怀疑这是你真正想要的。
我认为你真正想要的是能够在特定的pid上等待。 等待命令需要一个可选的PID。 要么这一轮需要检查什么时候等待返回刚刚结束的进程是否是一个你感兴趣的进程,如果不是,那么再等一等。