새로운 프로세스를 시작하여 재귀 적으로 작동하는 디렉토리 모니터링 응용 프로그램이 있습니다.프로세스 트리, 프로세스가 루트 프로세스인지 찾는 방법?
저는이 트리에서 "루트"프로세스인지 알고 싶습니다. 발신자 프로세스의 이름을 알아 내려고 시도한 후 과 같은지 확인했습니다.
더 똑똑한 방법이 있습니까? 명심하십시오.이 앱은 Linux 앱입니다.
나는 이것을 할 여유가 없기 때문에 학생이지만, 간단한 해결책이 좋을 것입니다.
감사합니다.
새로운 프로세스를 시작하여 재귀 적으로 작동하는 디렉토리 모니터링 응용 프로그램이 있습니다.프로세스 트리, 프로세스가 루트 프로세스인지 찾는 방법?
저는이 트리에서 "루트"프로세스인지 알고 싶습니다. 발신자 프로세스의 이름을 알아 내려고 시도한 후 과 같은지 확인했습니다.
더 똑똑한 방법이 있습니까? 명심하십시오.이 앱은 Linux 앱입니다.
나는 이것을 할 여유가 없기 때문에 학생이지만, 간단한 해결책이 좋을 것입니다.
감사합니다.
fork()
을 사용하여 새 프로세스를 만들면 각 자식이 분기 후에 즉시 1로 설정하는 지역 변수를 0으로 설정할 수 있습니다. 루트 프로세스 만 포크 후에도 0으로 설정됩니다.
심지어 각 프로세스가 얼마나 깊은 지 알 수있는 각 포크 후 수 있습니다.
편집 :
당신이 (당신이 포크 후 exec()
을하기 때문에 예를 들어)이이, 당신은 포탄이 발사 프로그램에 정보를 전달하는 데 사용하는 일반적인 방법 중 하나를 사용할 수 있습니다 사용할 수없는 경우 :
환경 변수 : 다음에 exec()
앞에 - exec()
을 호출 할 때 환경에 추가하십시오.
특수 명령 줄 인수를 사용하십시오.
exec()
을 수행 할 때 argv[0]
에 대한 특별 값을 사용하십시오.
해당 사항 없음, 나는 exec와 fork를 혼합하여 사용합니다. 어쨌든 고맙습니다. –
"나는 루트가 아닙니다"라는 인수를 추가 할 수 있습니까? 그것은 가장 단순한 접근 방법입니다.
exec를 호출하는 경우 특수한 인수 또는 "I_AM_NOT_THE_ROOT"라는 환경 변수를 추가합니다 (자식 프로세스는 가져 오지만 부모는 그렇지 않습니다).
최근에 나는 이것을 위해 명령 줄 인수를 사용했지만 env 변수가 더 편리 할 수 있습니다.
프로세스 트리의 루트라고 부르는 것을보다 잘 지정하십시오. 유닉스에서는 항상 PID 1을 사용하는 프로세스입니다. – AProgrammer
오류, 루트는 사용자 실행 프로세스 인스턴스입니다. –