signal 관련 질문입니다.
다음 소스는 부모에서 SIGINT / SIGALRM / SIGUSR1 신호등록을 해놓고,
fork한후 alarm(1 )을 하면 부모 , 자식 프로세스에게 동시
alarm 시그널이 도착해야할것같은데 부모만 알람이 접수되는 이유는 무엇
인지요?
( SIGINT 은 컨트롤C를 누를경우 부모/자식 동시 접수됩니다.)
#include
#include
#include
#include
#include
static struct sigaction act;
void sigfun( int signo );
int main( int argc , char *argv[] )
{
int ret;
pid_t pid;
act.sa_handler = sigfun;
sigaction( SIGALRM , &act , 0 );
sigaction( SIGINT , &act , 0 );
sigaction( SIGUSR1 , &act , 0 );
alarm( 1 );
if ( ( pid = fork() ) < 0 )
perror("");
else if ( pid == 0 )
{
for(;;)
pause();
exit(0);
}
/* send SIGUSR1 to child */
kill( pid , SIGUSR1 );
for(;;)
pause();
return 0;
}
void sigfun( int signo )
{
fprintf( stderr , "signal %d received \n" , signo );
}
(솔라리스) 실행결과입니다.
signal 16 received (-->자식이 SIGUSR1을 받음)
signal 14 received (-->부모만 SIGALRM을 받음-> 자식은 왜 안받죠?)
^Csignal signal 2 received (--> 컨트롤C 부모자식 signal 받음)
2 received
^Csignal signal 2 received
2 received
Re: signal 관련 질문입니다.
음 man page에 의하면
The fork(2) function sets the alarm clock of a new process to 0. A
process created by the exec family of routines inherits the time
left on the old process's alarm clock.
이런 내용이 있네요..
http//www.mcsr.olemiss.edu/cgi-bin/man-cgi?alarm+2
http//www.mcsr.olemiss.edu/cgi-bin/man-cgi?fork+2
fork시에 부모로 부터 상속받는 것과 그렇지 않은 내용이
두번째 링크에 잘 설명되어 있습니다. ^^;
댓글 달기