Perl труба зависает и процесс перестает работать - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть сценарий perl, который выполняет другой сценарий с использованием канала:

$pid = open (OUTPUT, "my_script.pl 2>&1 |") || "";
if ($pid) {
  while (<OUTPUT>) {
    print;
  }
  close (OUTPUT);
}

my_script.pl разветвляет другой дочерний процесс.Когда я сначала убиваю my_script.pl, а затем уничтожаю его дочерний процесс (я убиваю процессы вручную, используя kill -9), тогда my_script.pl процесс перестает работать, и канал зависает.Есть идеи, как решить эту проблему?

Я не хочу сначала убивать дочерний процесс.

1 Ответ

0 голосов
/ 19 декабря 2018

При выходе из программы она становится зомби (несуществующим процессом) до тех пор, пока ее родитель не получит ее (вызывая wait). [1] Если процесс полностью исчезнет, ​​программы не смогутполучить код выхода дочерних процессов.Это совершенно нормально, и это не проблема.

  1. Сироты (включая сирот-зомби) усыновляются процессом 1, который сразу же получает своих детей по завершении.
...