프로세스 상성에 관한 질문입니다
글쓴이: cats96 / 작성시간: 월, 2007/12/03 - 11:42오전
A라는 프로세스가 있고
A에서 생성된 B라는 프로세스가있습니다 (B는 fork or thread)
B프로세스 밑에는 여러개의 프로세스가있습니다.
제가 하려는것은 A프로세스는 계속 해서 동작하고 B의 상태를 확인해서
B가 죽은상태면 동작시키는 기능을 구현하려고합니다.
제가 구현한내용은 A에서 B를 생성하고 B프로세스가 끝날때까지 대기합니다
중간에 B프로세스를 죽입니다.(sigint 시그널)
그런데 B만 죽였는데 이상하게 A프로세스까지 죽어버립니다.
예상대로라면 B를 죽이면 A프로세스에서 B상태를 체크한후 B를 실행시켜야하거든요.
프로세스의 상성에 관해서 잘몰라서 조언좀 부탁드릴게요.
Forums:
혹시
B와의 통신(살아있는지 확인하기 위한)이 blocking 방식으로 되어 있는건 아닌지요?
현재 A프로세스에서
현재 A프로세스에서 B쓰레드를 생성했습니다.
A프로세스가 하는일은 B쓰레드 플래그 체크해서 B쓰레드 생성하는것이고요,
B프로세스 가 종료할때 플래그 초기화 해주고요.
b쓰레드가 종료되어도 제가 보기엔 A프로세스랑 별개인것 같은데 b쓰레드를 죽이면
A프로세스까지 같이 죽어서요.
B쓰레드를 죽일때는 SIGINT 시그널을 보내서 죽였습니다.
먼저 프로세스로만
먼저 프로세스로만 구현한 경우에, B가 사망시 A가 죽는다면, A의 시그널 핸들링이 다소 잘못되어 있지 않나 예측됩니다. 즉, A에서 처리한 모든 시그널핸들링을 먼저 나열해보아야 할 것 입니다. 또한, A와 B사이에 이뤄지는 IPC(프로세스간 통신)을 나열하여 상관관계를 살펴봐야 할것입니다.
A프로세스 내에서 B라는 쓰레드를 생성했다면, 외부에서 B라는 쓰레드에 시그널을 직접 전달할 수 있는 메카니즘은 존재하지 않습니다. A프로세스의 대표자(?)가 시그널을 대표로 받아서, 이를 B쓰레드에게 전달하는 메카니즘등의 형태로 구현되어야 할 것입니다. 또는, 소켓등을 이용해서 종료메시지등을 보내는 것도 좋은 방법이 되겠습니다.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
댓글 달기