exec라는 프로세스를 감지하는 방법이 있나요?

exec라는 프로세스를 감지하는 방법이 있나요?

나는 프로세스의 상태를 프로그래밍 방식으로 모니터링하는 데 관심이 있습니다(이 프로세스는 내 프로세스도 아니고 내 프로세스의 하위도 아닙니다). 주어진 프로세스(또는 그 변형 중 하나)가 발생할 때마다 exec증가하는 카운터나 변경되는 식별자가 있습니까 ? sysctl등의 제목을 확인했지만 libproc.h비슷한 내용을 찾을 수 없습니다.

분명히 PID는 변경되지 않지만 실행 가능한 경로, 매개변수 및 환경 변수는 변경됩니다.가능한변화. 이러한 값을 폴링하고 변경 사항을 감지할 수 있습니다. 모든 변경 사항은 변경 사항을 나타내지 exec만, 동일한 실행 파일, args 및 env를 사용하여 프로세스를 exec호출할 수도 있습니다(이상하긴 하지만). 그러면 경보가 발생하지 않습니다.

나는 궁극적으로 Darwin이 하는 일에 관심이 있지만 모든 *nix에 존재할 수 있는 유사한 메커니즘에 대해 듣고 싶습니다. 이것은 적어도 나에게 추가 연구를 위한 출발점을 제공할 것입니다.

답변1

운영 체제에 따라 다음을 사용해야 할 수도 있습니다.

strace # on linux. you can attach to a pid (if you (as root?) have the rights to do so)
# you can also "follow its children" (using the appropriate options : `man strace` )

다른 UNIX에는 동등한 기능(다른 기능 포함)이 존재합니다(운영 체제에 설치될 수도 있음).

dtrace # bsd originated, I believe. Should be present also on macos?

dtruss # on macos

truss # on aix

등.

각각에 대해: 수행하려는 작업을 수행하는 데 필요한 적절한 인수를 찾아야 합니다. (예: 일반적으로 기본값은 누락된 내용을 숨기고 시스템 호출 인수를 처음 몇 문자로만 자릅니다. 이 모든 것은 옵션을 통해 변경할 수 있습니다)

stderr에 뭔가가 출력되는지 확인하세요(아마도). 그리고 필요한 작업을 수행하는 스크립트로 포장하세요. (예: 2>/some/tracefile # 또 다른 스크립트 tail -f /some/tracefile을 갖고 이 시스템 호출 또는 저 시스템 호출이 오는 것을 보면 조치를 취하십시오.)

관련 정보