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中有一条等待命令,该命令等待所有子进程的结束,如果没有这样的tcpdump行,则与预期的一样.
但是我想捕获所有子进程完成之前的内容,因此我必须使用tcpdump.在此脚本中,tcpdump进程是一个子进程,
job_pool_wait也将等待tcpdump进程的结束,这是不期望的.
因此,解决方案是使tcpdump不是子进程,
我该怎么做,
或其他解决方案?
谢谢!
解决方法:
您应该能够在后台的子Shell中运行tcpdump:
(tcpdump -i eth0 -w tempcap &)
这样可以防止它显示为脚本的直接后代.
标签:shell,multiprocessing,linux,fork
来源: https://codeday.me/bug/20191123/2066829.html