system() 함수 질문입니다.
글쓴이: park3250 / 작성시간: 화, 2017/01/10 - 3:59오후
안녕하세요
포크 하여 생성되는 데몬이 있는데요
부모 프로세스에서 SIGCHILD 시그널 등을 등록하는데요
포그된 자식 프로세스에서 루프돌면서 system() 함수를 호출 하는데
부모 프로세스에서 SIGCHILD 시그널을 감지 할 때가 있는데요
감지될때 waitpid 리턴되는 pid가 데몬으로 올라간 pid는 아니더라구요
system() 함수에서 생성된 fork된 pid 일거같은데..
system() 함수 내에서 종료 될때 SIGCHILD 시그널이 발생하는건가요?
시그널 처리 주석처리 하면 정상작동합니다..
system() 함수와 시그널 처리를 어떤식으로 구현해야 되는걸까요?
답변 부탁드립니다...
Forums:
그냥 지나가다가...... 혹시 그거 쉘꺼 아닌가요
그냥 지나가다가...... 혹시 그거 쉘꺼 아닌가요
네 그런거 같아요..
포크 된 프로세스가 system() 함수를 호출하는데 system() 함수에서 fork 된 SIGCHLD를
SIGCHLD 시그널 등록된 부모프로세스에서 캐치하는거 같아요..
그래서 그부분을 주석처리 하면 잘 되더라구요
그런데 저 시그널은 처리를 해야 하는거여서...
어떻게 해야 할지 잘 모르겟네요ㅠ
부모 프로세스에서 SIGCHLD를 캐치하는 게
부모 프로세스에서 SIGCHLD를 캐치하는 게 확실한가요?
부모 프로세스에서 SIGCHLD handler를 등록한 뒤 fork하면,
자식 프로세스도 똑같은 signal handler를 가지게 됩니다.
제 생각에는 (system 함수를 호출하는) 자식 프로세스에서 SIGCHLD를 핸들링하고 있는 것 같은데요.
fork 이후 자식 프로세스에서 SIGCHLD handler 등록을 해제해보시는 건 어떨까 싶습니다.
답변 감사드립니다..
포크한뒤 부모, 자식 프로세스 각각 시그널을 등록하는데
부모, 자식 프로세스 모두 SIGCHLD를 시그널 등록 햇네요..
자식 프로세스에서는 SIGCHLD를 하지 않는게 맞는거겟죠?
SIGCHLD 시그널 등록한 목적이 부모 프로세스에서 자식 프로세스가 죽는걸
감지해서 다시 실행해주는 목적이니...
댓글 달기