У меня есть Perl-скрипт, который несколько раз вызывает fork () для создания 4 дочерних процессов.Затем родительский процесс использует waitpid (), чтобы дождаться завершения всех дочерних процессов.
Проблема возникает, когда я пытаюсь вызвать system () из дочерних процессов (я использую его для создания каталогов),Даже что-то столь простое, как system ("dir"), выходит из строя (да, я на Windows).
Под "неудачей" я подразумеваю, что один из дочерних потоков проходит без проблем, но другие дочерние процессы, насколько я могу сказать, просто перестают существовать.
trace INFO, "Thread $thread_id still alive at 2.62";
system("dir");
trace INFO, "Thread $thread_id still alive at 2.65";
Я получаю сообщения типа «Поток 3 все еще жив на 2.62», но только 1 из дочерних потоков когда-либо достигает 2.65.
В нижней части журнала я вижу «Команда завершена с ненулевым статусом127 ", что, я думаю, может быть как-то связано с этим.
Я рассмотрел возможность использования какой-либо блокировки мьютекса, чтобы убедиться, что только 1 процесс за раз проходит через системные вызовы, но как это сделать?Я делаю это с помощью fork ()?Кроме того, эта проблема на самом деле не имеет никакого смысла, во-первых, почему нескольким независимым процессам было бы трудно делать систему («dir») одновременно?