PID를 디스크에 기록하는 전략은 시스템 데몬들이 주로 사용하는 표준으로 syslog에서 OpenSSH까지의 모든 데몬이 이를 사용한다.

 일단 파일시스템에서 PID 파일을 이용할 수 있게 되면 프로세스는 ps 출력을 구문 분석하거나 유사 파일시스템(pseudo-filesystem) /proc 를 검색하지 않고도 자신의 다른 인스턴스가 이미 실행 중인지 확인할 수 있다. 이 해결책은 kill() 시스템 호출의 반환 값을 이용하는데, 확인하고자 하는 프로세스에게 SIGTERM, SIGHUP 또는 기타 표준 신호를 전송하는 대신 SIG_0 을 전송한다.

 이는 프로세스가 현재 실행 중이면(즉, 프로세스 테이블에 해당 프로세스 항목이 존재한다면) kill() 이 ‘0’을 반환하고 프로세스가 실행 중이지 않거나 오류 조건이 발생하면 ‘0이 아닌 값’을 반환하게 한다. psad 데몬이 실행 중인지 여부를 확인하는 데 이 방법을 어떻게 사용하는지 보이기 위해 다음과 같은 명령어를 사용할 수 있다.

User image
 0 이 반환됐으므로 psad 가 현재 시스템에서 실행 중임을 알 수 있다.

 kill() 시스템 호출이 실제로 어떻게 사용되며 무엇을 반환하는지 알아보기 위해 strace 유틸리티를 사용해보자. 마지막 행의 = 0 이 kill() 의 반환 값이다.

User image
 끝으로 충분히 발달한 모든 프로그래밍 언어가 kill() 시스템 호출에 대한 인터페이스를 제공하며 여기서는 psad 가 현재 실행 중인지 아니지를 탐지하기 위해 어떻게 펄을 사용하는지 알아본다.(kill() 시스템 호출은 굵게 나타낸 행에서 호출한다.)

User image

Tags: , , ,

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.