프로세스에 대해...
글쓴이: zombie007 / 작성시간: 토, 2003/10/11 - 2:44오후
안녕하세요..
fork 한후 자식 프로세스가 죽으면 다시 실행하는 것을 구현 해봤는데여..
signalhandle가 한번 밖에 호출 되질 않습니다...
어떤 이유때문인지 궁금합니다...
고수님들의 조언 부탁드립니다..
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/types.h>
#include <unistd.h>
static void signalhandle(int arg);
void child_stop();
int main()
{
pid_t pid;
int status;
signal(SIGCHLD, signalhandle);
/*parent process*/
if((pid = fork()) > 0)
{
wait(&status);
}
/*child process*/
else if(pid == 0)
{
child_stop();
}
}
void signalhandle(int arg)
{
pid_t pid;
printf(" signalhandle \n");
if((pid = fork()) == 0)
{
child_stop();
}
}
void child_stop()
{
printf(" child_stop() \n");
sleep(10);
exit(-1);
}
Forums:


man sigaction(2), use POSIX signal handl
man sigaction(2), use POSIX signal handling function.
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
Re: 프로세스에 대해...
signal 을 받을 parent process 가 종료되고 있습니다.
아래 방법이 하고자 하시는 일에 맞는지 모르겠으나, 아래처럼 해결은 가능합니다.
.... /*parent process*/ if((pid = fork()) > 0) { while( wait(&status) ) ; }발 담갔다. 이제 익숙해 지는길만이..
전통적인 handler 등록함수는 SIGCHLD에 대해 한 번의 호출만
전통적인 handler 등록함수는 SIGCHLD에 대해 한 번의 호출만 되도록 합니다. 즉, handler 가 reset되는 것입니다.
cinsk 님이 권하시는대로 sigaction을 사용하여 reset이 되지 않도록 default option을 없애고 등록하시던지,
sigchld handler 안에 서 재등록하도록하는 것이 해결책입니다.
재등록하는 방법은 별로 권하고 싶지 않군요.
---
http://coolengineer.com
댓글 달기