2010-04-27 4 views
0

나는 리눅스에 익숙하지 않고 여러 스레드를 생성하는 C++로 서비스를 작성하고 init.d에서 호출하여 서비스를 시작하지만 어떻게 응용 프로그램에 종결 신호를 보내야합니까? 스크립트에서, 그래서 내 서비스가 모든 스레드를 종료하고 종료합니다.리눅스 서비스 및 cron 작업 소스

또한 모든 Linux 서비스의 소스 코드는 어디에서 찾을 수 있습니까? 예 : /etc .init.d/rc5.d/S14cron. 서비스 구현 방법을 이해하는 데 도움이 될 것입니다.

답변

1

이런 종류의 질문에 대한 고전적인 참고 자료는 Steven의 "UNIX 환경에서의 고급 프로그래밍"입니다. 이 교과서 here에 대한 소스 코드를 찾을 수 있습니다.

1

응용 프로그램에 따라 다릅니다.

개인적으로 신호를 처리하기위한 스레드를 유지하고 다른 스레드에서 sigprocmask를 호출하여 신호가 전달되는 것을 막을 수 있습니다.

주 스레드/신호 처리 스레드 (보통 주 스레드로 만드는 것이 좋습니다)는 스레드에 메시지를 전송하여 수행중인 작업을 마치고 종료하도록 지시 할 수 있습니다. 당신의 원리를 좋아하는 경우에

또는 충돌을 전용, 당신은 단지 exit_group 부를 수 있으며 :) 함께 할 수

+0

@MarkR 무엇 메인 쓰레드가 다른 작업자 스레드에 메시지를 보낼 수있는 가장 좋은 방법은 terminate – Poorna

+0

정말 다른 스레드가 수행하는 작업에 따라 다릅니다. 대부분의 경우 전역 변수를 설정하는 것으로 충분할 수 있습니다. 다른 스레드가 뭔가를 기다리고 있다면 깨워야합니다. 싱글 바이트를 보내는 명명 된 파이프를 갖는 것과 같은 많은 치트가 있습니다. – MarkR