fork()를 몇 번 호출하여 4 개의 하위 프로세스를 생성하는 perl 스크립트가 있습니다. 그런 다음 부모 프로세스는 waitpid()를 사용하여 모든 자식이 완료 될 때까지 대기합니다.fork() 후 실패한 Perl 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";
"Thread 3 still alive at 2.62"와 같은 메시지가 표시되지만 하위 스레드 중 하나만 2.65가됩니다.
로그 맨 아래에서 "0이 아닌 상태 127로 종료 된 명령"을 볼 수 있습니다.이 명령과 관련이있을 수 있습니다.
일종의 뮤텍스 잠금을 사용하여 한 번에 하나의 프로세스 만 시스템 호출을 통과하는 것을 고려했지만 어떻게 fork()를 사용하여이를 수행 할 수 있습니까? 또한이 문제는 처음부터 실제로 의미가 없습니다. 왜 여러 독립 프로세스가 동시에 시스템 ("dir")을 수행하는 데 문제가 있습니까?
왜'system()'을 사용하여 디렉토리를 만드나요? – TLP
사용중인 펄의 버전은 무엇입니까? 스레드로부터 안전합니까? –
우리는 문제를 재현 할 수있는 (최소한의) 코드를 제공 할 수 있습니까? – ikegami