[완료] 데몬이 종료시그널을 받기전까지 블럭시킬려면 어떻게 해야되나요??
글쓴이: amiwinner / 작성시간: 화, 2007/10/16 - 2:29오후
안녕하세요.
윈도우 프밍만하다가 리눅스를 할려니 익숙치 않아서 고생이 많네요.ㅠ.ㅠ.
왠만큼 코드를 옮기고 데몬으로 돌아가게끔 하렬고 합니다.
데몬으로 설정하는 부분은 해놨는데..
이전 콘솔모드에서는 getch()를이용해서 특정문자열이 입력되면 루프가 풀려서
각 객체들의 종료작업을 해주고 프로세스가 죽게끔 했었는데요..
데몬으로 돌리다보니..이부분을 어떻게 처리해주어야 할지 잘 모르겠네요.
그냥 봐서는 특정시그널을 받을때까지 블럭하고 있다가 시그널이 도착하면
블럭이 풀려서 종료작업을 해주면 될듯한데..
어떤 함수들을 사용해서 만들어 주어야 하는지 잘 모르겠습니다.
자료를 찾아보니 kill pid 하면 SIGTERM이 날라간다고 본거 같은데..
보통 어덯게 처리해주면 되나요?
고수님들의 도움좀 부탁합니다.
Forums:
이래저래해서..
signal()과 pause()를 조합해서 해봤는데..적당한 방법인지..고수님들 도움좀 주세요.ㅠ.
signal은 kill xxxx 할때 발생하는 SIGTERM 으로 처리했습니다.
종료 시그널을
종료 시그널을 받을때까지 라고 써놓으셨는데
꼭 종료 시그널이어야하는가요?
또 꼭 시그널( SIGTERM 이라던지 )이어야 하는가요?
단지 특정 신호를 받기전까지 대기 상태로 빠지게 해놓는거면
그냥 파이프나 소켓을 열어 놓고 신호가 올때까지 기다리거나( 그냥 sync I/O를 쓰시면 되겠죠. )
뭐..꼭 종료 시그널로만 처리하고 싶으시다면
저 같음 mutex같은걸로 lock을 걸어놓고
SIGTERM signal handler에서 해당 lock을 풀어버리겠네요
하지만, 특정 조건이 만족 될 때까지 아무것도 안하는 로직을 원하시는것 뿐이라면
저 같음 굳이 시그널을 쓰진 않겠네요. 소켓이나 파이프가 나을듯..
mutex
시그널 핸들러 안에서 mutex 를 사용하면 안됩니다.
리눅스에서 사용하는
리눅스에서 사용하는 daemon에 대한 자세한 설명 및 예제 코드는 아래를 참고하시고요...
http://wiki.kldp.org/wiki.php/daemon
아래의 코드는 일반적인 종료 시그널(SIGINT 및 SIGTERM)에 의해 종료되는 application의 작성 예입니다. 이를 참고하셔서 다양한 동작의 작업을 수행하도록 응용하실 수 있을 겁니다.
감사합니다.
답변 감사드립니다.
댓글 달기