Этот ответ объясняет, как получить pid нового процесса при использовании Perl exec()
.Pid даже не меняется, поэтому все, что вам нужно сделать, это получить pid оригинального скрипта.Но это не сработает, если я перенаправлю вывод в файл как часть команды, что мне нужно сделать.
say "my pid is $$";
exec("childscript.pl"); # same pid
Но если я перенаправлю вывод как часть команды:
say "my pid is $$";
exec("childscript.pl > log.txt"); # different pid, usually old pid + 1
exec("childscript.pl > log.txt 2>&1 &"); # same
, тогда новый pid будет на один выше, чем старый (что, вероятно, только потому, что они были созданыпо очереди и не надежно).Я проверил это как путем просмотра выходных данных, так и путем вставки sleep 30
в «childscript.pl», чтобы я мог видеть его с помощью ps -e
.
Я предполагаю, что перенаправление вывода вызываетновый процесс, чтобы сделать написание.Но мне нужен pid программы, и я не имею никакого контроля над программой, за исключением того факта, что я могу ее выполнить.(Он также должен работать в фоновом режиме.)