머리가 부셔질거 같습니다.... 답변좀 부탁드립니다 ㅠㅠㅠㅠ
글쓴이: wkdwnsghsms / 작성시간: 토, 2013/12/14 - 11:23오후
제가 프로세서 에 관해서 지금 프로그램을 만들고 있는데
답답해서 글을 올려 봅니다...
부모 자식 프로세서 두개가 있습니다.
그런데
자식 프로세서에서 종료가 되면
부모 프로세서로 어떠한 값이나 신호가 가서
특정한 함수가 실행 되는 프로그램입니다.
근데 진짜 도저히 모르겠습니다.
공유 메모리(세메포어) 써서 자식 프로세서를 exit 로 종료 하기전에 어떠한 값을 저장해서 부모 프로세서에서 쓸수 있도록 해서 함수를 if 문을 사용해서 실행 하는 방법도 해봤는데.
이건 도저히 비효율적이라 안되고(서버 종료를 할수가 없어서 공유메모리가 계속 남내요...그리고 이건 아무리봐도 아닌거 같아서..)
그나마 시그널이라는 방법이 있는데..
이거는 머... 보면 다
자식 프로세서에서 부모 프로세서로 자식 프로세서가 종료 됬다는 신호는 보내는데
부모프로세서가 그 신호를 어떻게 받는지가 안나와 있습니다..
그 신호만 변수 로 저장해서 사용하면
특정 함수를 사용할수 있다고 생각했는데..
도저히 못찿겠네요...
제발 부탁드립니다 ㅠㅠ
Forums:
wkdwnsghsms 이건 어떻게 읽나요? 제 머리가
wkdwnsghsms 이건 어떻게 읽나요? 제 머리가 부서질 것 같네요.
http://stackoverflow.com/questions/13351851/killing-a-child-process-from-a-signal-handler 이런 걸 찾으시는 건지?
세벌 https://sebuls.blogspot.kr/
wait...
wait 함수가..
부모 프로세서가 자식 프로세서 종료 될때까지 기다리는 함수인데..
제가 만들려는거는
부모 프로세서는 계속 돌고 있어야 합니다..
기다리면 안됩니다 ㅠㅠ
부모 자식 둘다 실행 도중에
자식이 종료되기 전까지 부모는 while 문을 통해서 계속 반복 실행 되야 합니다.
여기서 자식이 종료 신호를 보내면 부모는 그 신호를 받고 while 문을 빠져 나가야합니다..
간단한 것 같은데
제 생각엔 그냥 스레드 하나 생성하고
메인이나 생성한 워커 스레드 하나는 자식 wait하고 다른 스레드는 계속 작업하면 되겠는데요.
그리고 while문 조건에다 자식이 죽었는지 살았는지 알리는 flag 하나 달면 되겠구요.
바로 빠져나가야 한다면 그냥 스레드 lock 걸어버리고 프로그램 죽이는 것도 방법이구요. 그렇게 안전하지 않아도 되는 프로그램이라면 말이죠.
...
부모 프로세스가 시작할 때 signal 함수를 불러서 SIGCHLD 핸들러를 등록한 다음, 시그널이 불리면 핸들러에서 (부모 프로세스의) 전역변수에 child_has_exited = true; 뭐 이런 걸 세팅해 주고, 부모 프로세스의 메인 while 루프는 이 변수가 참이 될 때까지 돌고 있으면 되겠네요.
나무아비타불...
왜 시그널은 다 전역 함수를 쓰는 거임???????
while 문 내에서 종료 하고 위분 말대로 하닌깐 한번 더돌아감..
신호 받자마자 종료 해야하는데
break 걸어서 나가야하는데
한번 더 실행됨..
바로 나가야 하는데
전역함수에 break 를 만들수도 없고 ㅠㅠ
댓글 달기