Система Perl () запускает процесс, но нарушает отношения родитель / потомок?
test.pl:
use POSIX;
system("./test.sh &");
my $pid = `ps -C test.sh -o pid=`;
print "pid: -$pid-\n";
waitpid($pid, 0);
test.sh:
while true
do
sleep 1
done
Когда я запускаю test.pl, он находит и печатает правильный pid test.sh. Но waitpid () возвращает -1 и test.pl завершается. После существования test.pl test.sh все еще работает.
Похоже, test.sh не является потомком test.pl, который ломает waitpid (). Почему это происходит и как заставить system () себя вести? Это потому, что Perl очищает детей автоматически? Если да, как я могу решить общую задачу ожидания ребенка в явном виде?
Обновление:
ответы ниже предлагают использовать fork / exec. Исходная проблема заключается в следующем:
из сценария Perl, запустите утилиту командной строки, которая запускает службу. Утилита завершается, но служба остается.
через некоторое время найдите pid этой службы и дождитесь его.
fork / exec не решает эту проблему, хотя и проясняет вопрос.