Perl에서 관리 프로세스를 관리하는 방법이 있습니까 (즉, 실제로 작동하는 스레드 교체)?

StackOverflow https://stackoverflow.com/questions/138696

문제

Perl에는 여러 가지 비 스레드 안전 모듈에 의존 해야하는 멀티 리드 응용 프로그램이 있으므로 사용하고 있습니다. fork()ED 프로세스 kill() 인터페이스를 전달하는 메시지로서 신호.

문제는 신호 핸들러가 약간 불규칙하다는 것입니다 (가장 말하기). 종종 적절한 상태에서 사망하는 프로세스로 끝납니다.

더 좋은 방법이 있습니까?

도움이 되었습니까?

해결책

살펴보십시오 Forks.pm, "Fork ()를 사용하는 Perl 스레드의 드롭 인 교체"는 훨씬 더 현명한 메모리 사용을 만듭니다 (그러나 Win32에서는 사용하지 않음). "공유"변수를 선언 한 다음 프로세스 간의 변수에 대한 변경 사항을 자동으로 전달합니다 (Threads.pm이 수행하는 방식과 유사).

다른 팁

프로그램이 필요한 일에 따라 사용을 고려할 수 있습니다. , 사용자 공간 스레드가있는 다중 스레드 애플리케이션을위한 Perl 프레임 워크입니다. 복잡하지만 우아하고 강력하며 단일 Perl 통역사 스레드에 활동을 제한하여 비 스레드-안전 모듈을 피할 수 있습니다.

시작하는 데 도움이되는 리소스 :

또한 수백 개의 사전 제작이 있습니다 POE 구성 요소 응용 프로그램에 조립하는 데 사용할 수 있습니다.

항상 부모와 자식 사이에 파이프를 가질 수 있으며 메시지를 앞뒤로 전달할 수 있습니다.

pipe my $reader, my $writer;
my $pid = fork();
if ( $pid == 0 ) {
    close $reader;
    ...
}
else {
    close $writer;
    my $msg_from_child = <$reader>;
    ....
}

매우 편안한 프로그래밍 방법은 아니지만 '불규칙적'이어서는 안됩니다.

PERL 5.8에서 핵심 스레드 모듈을보고 있어야합니다. 살펴보십시오 http://metacpan.org/pod/threads

스레드 안전하지 않은 모듈을 사용하려면 일반적으로 스레드 진입 점 내부에서 요구 사항으로로드하고 가져올 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top