2012-09-17 2 views
0

SIGUSR2와 SIGUSR1을 사용하여 프로세스를 차단하고 깨우지 않으면 안됩니다. 아래는 내 시그널 핸들러 서브 루틴이다. 일시 중지로 인해 차단 된 프로세스를 어떻게 작동 시키나요?일시 중지()로 차단 된 프로세스를 깨우는 방법?

void sig_handler(int sig) { 
    static int i = 1; 
    if(sig == SIGUSR2) { 
    pause(); 
    } 
    else if(sig == SIGUSR1) { 
/* I don't what to write here */ 
    } 
} 

또한, 나는 몇 시간 동안 프로세스를 정지 할 다른 방법이 어딘가 일시 정지() 좋은 프로그래밍 방법이 아닙니다 읽어?

답변

0

까다로운 ... 신호에 작품을 많이한다하고, 일반적으로

this page를 참조하십시오. 어떤 것들은 비동기 신호에 안전하지 않으므로 거기에서 강력한 프로그래밍을 어렵게 만듭니다. 귀하의 경우, pause()는 신호가 도착하기를 기다리지 만, 신호 처리기에서 호출하기 때문에 거기에서 작동하지 않습니다 (제 생각에는).

프로세스를 수면으로 만들고 신호를 다시 시작합니다. 위에 링크 된 페이지를보십시오. 가장 좋은 방법은 신호 핸들러가 단순히 플래그를 설정하고 메인 스레드 (즉, main() 또는 이벤트 루프)가이 플래그에 반응하도록하는 것입니다. 페이지에서 권장하는대로 SIGUSR2가 수신되면 sigsuspend를 사용하여 SIGURS1이 수신 될 때까지 프로세스를 일시 중지하십시오.

+0

ok. 그러나 어떻게 자고있는 과정을 깨울 수 있습니까? –

+0

이 부분에 대한 답변도 편집되었습니다. –

관련 문제