PID 생성 관련

System/Common 2012. 2. 11. 12:51

프로세스 pid 기록에 관한 질문입니다.

alwaysrainy의 아바타

특정 루틴을 실행하는 프로세스와 각각의 이벤트 수신을 대기하고 있는 
프로세스들이 실행중이고 이벤트 수신시에는 특정 프로세스를 kill 시켜야 
하는 경우 입니다.

저같은 경우는 현재까지도 이러한 경우 프로세스 생성시에 모든 pid를
공유 메모리 상에 기록하고 필요시에 참조하는 방식을 사용하였는데
많은 개발자들이 이러한 경우 파이프나, 파일에 pid를 기록해 놓는 방식을
사용하고 있는 것 같습니다.

이러한 경우 특정한 룰(?)을 따라서 개발을 하여야 하는 것인지요?
제 짧은 지시으로는 구지 디스크를 억세스해야할 필요는 없을 듯 한데..

답변 부탁 드립니다.


 용도에 맞게 쓰시면 됩니다.내부적으로 자식프로세스를 관리하기 위해 

용도에 맞게 쓰시면 됩니다.

내부적으로 자식프로세스를 관리하기 위해서라면
파일보다는 메모리에서 쌓아두고 관리하는게 좋습니다.

외부적으로 특정 프로세스가 실행중이다라는걸 알려줄 필요가 있을때 /var/run/????.pid 파일에 pid 값을 쓰는 방법을 사용합니다.

다른 특정 프로세스가 /var/run/????.pid 파일이 존재하는지 확인하고 특정 작업을 수행한다던지를 할 수 있으니까요. 

사견을 적어보자면파일로 저장하는 대부분의 이유는 쉘스크립트로 확인 

사견을 적어보자면

파일로 저장하는 대부분의 이유는 쉘스크립트로 확인하기 위함인 듯 하네요.
프로세스 start/stop/restart 하는 기능을 갖고 있는건 보통 쉘스크립트 이기때문에 파일에 아스키 형식으로 저장되어 있는게 좋져.

"파일을 사용할 필요가 없으면 공유메모리로..." 라는 공식보다는 "메모리에 기록할 정도의 고속이 필요 없다면 파일로..." 라는 공식이 맞는 듯 합니다. 
요즘은 메모리가 크다고 해도 사실 파일보다 메모리가 좀 더 제한된 리소스에 속할 뿐만 아니라, 공유메모리는 일반 프로세스 메모리와 달리 강제로 삭제 해 주어야 하고, 또 동시에 생성할 수 있는 공유메모리 개수도 커널에 의존적으로 제한되어 있고, 한번 생성하면 사이즈도 고정되고, 공유메모리에 대한 정보를 커널이 계속 관리하고 있어야 하는 등 문제로 인해 pid 정도의 아주 작은 정보이면서 엑세스가 고속일 필요가 없는 정보를 공유메모리에 저장할 필요가 없을 듯 하군요.
디스크 IO 가 일어나는게 찜찜하다면 리눅스의 /dev/shm 과 같은 램디스크를 사용하시는게 더 좋을 듯 하군요.
디스크 IO 와 같은 스트림 방식이 싫으시다면 mmap 을 사용하셔도 될 듯 하네요.


출처 - http://kldp.org/node/41498 


Posted by linuxism

댓글을 달아 주세요