2011-04-13 2 views
0

새로운 프로세스를 시작하여 재귀 적으로 작동하는 디렉토리 모니터링 응용 프로그램이 있습니다.프로세스 트리, 프로세스가 루트 프로세스인지 찾는 방법?

저는이 트리에서 "루트"프로세스인지 알고 싶습니다. 발신자 프로세스의 이름을 알아 내려고 시도한 후 과 같은지 확인했습니다.

더 똑똑한 방법이 있습니까? 명심하십시오.이 앱은 Linux 앱입니다.

나는 이것을 할 여유가 없기 때문에 학생이지만, 간단한 해결책이 좋을 것입니다.

감사합니다.

+0

프로세스 트리의 루트라고 부르는 것을보다 잘 지정하십시오. 유닉스에서는 항상 PID 1을 사용하는 프로세스입니다. – AProgrammer

+0

오류, 루트는 사용자 실행 프로세스 인스턴스입니다. –

답변

5

fork()을 사용하여 새 프로세스를 만들면 각 자식이 분기 후에 즉시 1로 설정하는 지역 변수를 0으로 설정할 수 있습니다. 루트 프로세스 만 포크 후에도 0으로 설정됩니다.

심지어 각 프로세스가 얼마나 깊은 지 알 수있는 각 포크 후 수 있습니다.

편집 :

당신이 (당신이 포크 후 exec()을하기 때문에 예를 들어)이이, 당신은 포탄이 발사 프로그램에 정보를 전달하는 데 사용하는 일반적인 방법 중 하나를 사용할 수 있습니다 사용할 수없는 경우 :

  • 환경 변수 : 다음에 exec() 앞에 - exec()을 호출 할 때 환경에 추가하십시오.

  • 특수 명령 줄 인수를 사용하십시오.

  • exec()을 수행 할 때 argv[0]에 대한 특별 값을 사용하십시오.

+0

해당 사항 없음, 나는 exec와 fork를 혼합하여 사용합니다. 어쨌든 고맙습니다. –

2

"나는 루트가 아닙니다"라는 인수를 추가 할 수 있습니까? 그것은 가장 단순한 접근 방법입니다.

1

exec를 호출하는 경우 특수한 인수 또는 "I_AM_NOT_THE_ROOT"라는 환경 변수를 추가합니다 (자식 프로세스는 가져 오지만 부모는 그렇지 않습니다).

최근에 나는 이것을 위해 명령 줄 인수를 사용했지만 env 변수가 더 편리 할 수 ​​있습니다.

관련 문제