我正在使用 shell process pool API在 Github 上,一个脚本,如下所示
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
命令,它等待所有子进程结束,如果没有这样的tcpdump行,则符合预期。
但是我想在所有子进程完成之前捕获一些东西,所以我必须使用 tcpdump。在这个脚本中,tcpdump 进程是一个子进程,
job_pool_wait
也会等待 tcpdump 进程结束,这不是预期的。
所以一个解决方案就是让tcpdump不是子进程, 我该怎么做, 或任何其他解决方案? 谢谢!
最佳答案
您应该能够在后台的子 shell 中运行 tcpdump
:
(tcpdump -i eth0 -w tempcap &)
这应该可以防止它显示为您脚本的直接后代。
关于linux - 是否可以在 shell 脚本中创建非子进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16402157/