В Perl я не могу присоединиться к потоку, когда запущен другой дочерний процесс, который был разветвлен с помощью open - PullRequest
1 голос
/ 26 января 2012

Я хочу сделать следующие вещи из основного потока / процесса:

  1. Связь с другим процессом с использованием канала.

  2. Создание потоков для выполнения определенной задачи.

  3. Дождитесь завершения всех потоков.

Ниже приводится псевдокод, который я пытаюсь:

 use threads;
 use IO::Handle;
 sub dummy {
      print "\n!!!!". $$;
      return 0;
 }

 open($handle, "| cat -v") || die "Unable to open connection to BT Driver: $!\n";

 $handle->autoflush(1);

 #close $handle; If I uncomment this, threads can be joined. But I don't want to terminate this child process.

 $thr2 = threads->create(\&dummy);
 sleep 2;
 print "\n$thr2";
 foreach $thr (threads->list(threads::joinable))
 {
      print "\nIam here";
      print "\n!!!". $thr;
      $thr->join();
 }

Код застревает, когда я пытаюсь присоединиться к потоку, даже если он присоединяется.

Я что-то здесь не так делаю? Я использую Perl 5.10.0

1 Ответ

4 голосов
/ 26 января 2012

У меня нет 5.10.0 с скомпилированными потоками, чтобы попробовать его, но 5.12.4 зависает на "Iam here". 5.14.1 работает до завершения.

В потоках Perl есть много ошибок, но в последние годы ситуация стала намного лучше. 5.10.0, вероятно, будет полон ошибок, и самый простой способ их решения (и множество проблем) - просто обновить Perl.

...