프로세스에 대해...
글쓴이: 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 가 종료되고 있습니다.
아래 방법이 하고자 하시는 일에 맞는지 모르겠으나, 아래처럼 해결은 가능합니다.
발 담갔다. 이제 익숙해 지는길만이..
전통적인 handler 등록함수는 SIGCHLD에 대해 한 번의 호출만
전통적인 handler 등록함수는 SIGCHLD에 대해 한 번의 호출만 되도록 합니다. 즉, handler 가 reset되는 것입니다.
cinsk 님이 권하시는대로 sigaction을 사용하여 reset이 되지 않도록 default option을 없애고 등록하시던지,
sigchld handler 안에 서 재등록하도록하는 것이 해결책입니다.
재등록하는 방법은 별로 권하고 싶지 않군요.
---
http://coolengineer.com
댓글 달기