2013-01-07 1 views
8

perl에서 자식 프로세스를 실행하고 싶습니다. 나는 또한 내 코드가 플랫폼에 독립적 (파일 경로와 같은 몇 가지 결함을 제외하고는 유닉스뿐만 아니라 윈도우에서도 동일)되기를 바란다.펄에서 포크 구현

문제는 Windows에서 fork의 펄 구현은 가상 프로세스, 실제로 스레드입니다. Windows here의 펄 포크 에뮬레이션을 참조하십시오.

또한 의사 프로세스에서 killexec 명령을 실행할 때의 문제점에 대해 언급합니다. 서로 다른 플랫폼에서 서로 다른 두 가지 버전의 포크를 사용하는 것이 안전할까요, 아니면 OS 전용 API를 사용해야합니까?

답변

4

비동기 프로세스가 필요하다고 가정하면 플랫폼 별 API로 이동하십시오 (어린이를 기다릴 수 있다면 system 또는 qx을 사용할 수 있음).

UNIX의 경우 fork/exec, Windows의 경우 Win32::Process::Create입니다. Windows에서의 포크 에뮬레이션은 용감한 시도 였지만이 영역에서는 플랫폼이 매우 다르기 때문에 모든 상자를 똑딱 거리는 휴대용 솔루션을 만드는 데 더 많은 노력을 기울이고 있다고 생각합니다.

예 : python이 subprocess 모듈을 사용하여 인터페이스를 통합하려고 시도했습니다. 그것은 단순한 것들을 위해 일하지만, 유닉스 특유의 매개 변수 4 개와 윈도우 특정 매개 변수 2 개가 있습니다 (Popen에게).

5

Forks::Super 이미에 대해 걱정하고 이식

use Forks::Super; 

$pid = fork(); 
if ($pid != 0) { 
    ... 
    if (kill 'ZERO',$pid) { print "Job is running.\n"; } 
    kill 'STOP', $pid; # or $pid->suspend 
    kill 'CONT', $pid; # or $pid->resume 
    kill 'TERM', $pid; # or $pid->terminate 
    waitpid $pid, 0; # or $pid->wait or $pid->waitpid(0) 
} 
과 같은 코드를 실행시키는 이러한 이동성 문제를 많이 해결