Я использую 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 линию, то он работает отлично, как и ожидалось, но когда ТСРйитр линия есть, В job_pool_wait
есть команда wait
, которая ждет окончания всех процессов с детьми, если такой строки tcpdump нет, это так, как ожидалось. Но я хочу захватить что-то, пока все дочерние процессы не закончатся, поэтому я должен использовать tcpdump. В этом скрипте процесс tcpdump является дочерним процессом, job_pool_wait
также ждет окончания процесса tcpdump, чего не ожидается.
так что решение должно сделать tcpdump не дочерним процессом, как я могу это сделать, или любые другие решения?
ничего себе, здорово! все хорошо! можете ли вы немного рассказать о скобках? благодаря! – misteryes
@misteryes: Скобки указывают, что команда внутри них должна выполняться в под-оболочке. Под-оболочка создает процесс дочерней оболочки для выполнения предоставленной команды. Результатом является то, что 'tcpdump' становится внуком для вашего скрипта, а не для ребенка. – jxh
так, на самом деле он сразу же передается процессу init, потому что нет реальной суб-оболочки, верно? Я проверил использование 'ps -ef' и узнал, что его родительский pid равен 1 – misteryes