fork()이후 자식 프로세스끼리의 시그널 보내기
글쓴이: tstudy119 / 작성시간: 일, 2013/11/10 - 1:56오전
fork()함수를 이용해서 자식 프로세스를 3개 만든 후,
자식 프로세스끼리 환형으로 시그널을 주는 게 가능한가요?
A -> B -> C -> A 이런 식으로요.......
문제는 pipe나 메시지 큐같은 ipc를 사용하지 말고 시그널 만으로 구현해야 하는데,
부모랑 자식끼리 시그널 보내기는 부모 프로세스에서 fork()의 리턴 값으로, 자식 프로세스 에서는 getppid()함수로 pid를 얻으면간단한데,
같은 부모프로세스 밑의 다른 자식프로세스는 ipc를 사용하지 않고서는 서로 pid를 알 수 있는 방법이 없나요?ㅜㅜ
Forums:
부모 프로세스까지 포함한다면 특별한 코딩 없이도
부모 프로세스까지 포함한다면 특별한 코딩 없이도 환형구조를 간단히 만들 수 있습니다.
child[] 배열에는 순차적으로 자식 프로세스 pid가 들어가게 되는데, 이 배열 내용물도 fork()시 복제되므로 각 자식프로세스는 자기보다 먼저 만들어진 형제 프로세스의 pid는 알 수 있습니다. 따라서 자신의 직전에 만들어진 형제프로세스를 시그널 송신대상으로 삼으면 됩니다. 다만, 첫번째 자식은 다른 형제의 pid를 알 수 없으므로 부모 프로세스를 송신대상으로 삼고, 부보 프로세스는 마지막 자식프로세스를 송신대상으로 삼게하면 환형구조가 완성되는 것이죠.
부모 -> 세번째자식 -> 두번째자식 -> 첫번째자식 -> (부모) 의 순환고리가 됩니다.
실행결과는 아래와 같습니다.
감사합니다ㅜㅜ
모든 자식 프로세스의 PID를 다 아는 부모 프로세스를 끼우면 가능한 거였네요ㅜㅜ
정말 감사합니다.
부모 프로세스까지 환형구조에 참가시키고 싶지
부모 프로세스까지 환형구조에 참가시키고 싶지 않다면,
각 프로세스가 다른 자식 프로세스의 pid를 알아낼 일반적인 방법이 필요한데, 부모프로세스 pid를 주고 그 자식프로세스를 찾아주는 'pgrep -P $ppid' 명령을 이용할 수 있을 것입니다. 물론 프로세스 정보에 접근하는 다른 방법도 있겠죠..
샘플코드와 실행결과를 올립니다. 깔끔하지는 않지만 참고는 될 것입니다.
감사합니다!
어떻게 풀어야 할지난감했는데,,, 감사합니다.
댓글 달기