fork + exec + caller не должен ждать ребенка
У меня есть два сценария script_a и script_b. script_a вызывает script_b. script_b разветвляется на два процесса. Как показано ниже.
script_a ожидает завершения родительского и дочернего сценария script_b. Я хочу, чтобы script_a продолжался, не дожидаясь дочернего процесса script_b.
Что я сделал для этого в script_b, я добавил следующий код.
if (! $f_id) {
close STDOUT;
close STDERR;
exec("sleep 10; echo 'i am child'");
}
Это работает для меня. script_a больше не ожидает дочерний процесс.
Мой вопрос здесь 1. Это правильный способ сделать это? 2. Родитель и дочерний процесс имеют одни и те же STDOUT и STDERR, и я бы в конечном итоге попал в беду, если есть состояние гонки? 3. Есть ли лучшие способы сделать это?
Заранее спасибо за помощь.
script_a.pl
#! /usr/local/bin/perl
print `script_b.pl`;
script_b.pl
#! /usr/local/bin/perl
$f_id = fork();
if (! $f_id) {
exec("sleep 10; echo 'i am child'");
}
if ($f_id) {
print "i am parent\n";
}