У меня есть сценарий, в котором я хотел бы добавить «автоматический» режим, где он будет делать некоторую обработку, сгенерировать некоторый вывод, а затем ввести в фоновом режиме .Как продолжить выполнение скрипта Perl в фоновом режиме?
Как я могу достичь этого безопасно? Будет ли простая вилка и выход из родителя сделать это, или это создаст проблему с зомби (сиротой)?
# initial processing
defined (my $pid fork) or die "Can't fork: $!";
exit if $pid;
# continue child in background
Сироты, то есть процессы, в которых родитель больше не существует, обычно автоматически обрабатываются процессом init. Зомби - это другое дело: существует родительский процесс, но он не хочет «ждать» для ребенка, и, таким образом, процесс не полностью готов, даже если он мертв. В вашем случае это будут сироты, поэтому не нужно беспокоиться об этой части. Возможно, вам придется беспокоиться об общих файловых дескрипторах и т. Д. С родителем родительского элемента (например, оболочкой). –
Как указано, это безопасно. Это один из способов поставить что-то в фоновом режиме - вилка и выход из родителя немедленно, а код для запуска - в дочернем. Затем init берет на себя ребенка, и все хорошо (в конце концов пожнет его, когда ребенок закончит). Что вы хотите, чтобы ребенок сделал? Связано ли это с первоначальной обработкой, которая выполняется в родительском объекте до его выхода? – zdim
Спасибо @zdim. Да, связано. Ну, я называю это просто новым режимом для запуска того же самого. В своем «обычном» режиме сценарий извлекает данные, выводит краткое изложение того, что будет сделано, а затем выводит то, что делается на каждом шаге. Я уже реализовал бесшумный режим, но я считаю, что резюме особенно полезно. Таким образом, этот новый «режим» будет работать до тех пор, пока не будет напечатано резюме, тогда, если новая опция была предоставлена, сделайте вилку, убейте родителя, установите молчание и продолжите выполнение. Надеюсь, это хороший способ его реализации. – sidyll