나는 특정 코드 조각이 약 84분마다 주기적으로 실행되는 젠투 파생 버전에서 실행되는 복잡한 임베디드 Linux 소프트웨어를 가지고 있습니다. 이 코드가 실행될 수 있는 위치를 찾기 위해 기본 코드를 스캔하는 것은 실패했으며 crontab
가능한 설명도 없는 것 같습니다.
내 질문: 문제의 코드를 수정하여 어떤 다른 프로세스/코드/파일/서비스가 먼저 시작되었는지 알아내는 것이 가능합니까? 디렉토리에 /proc
제가 사용할 수 있는 정보가 있나요? 아니면 어떤 프로세스가 특정 코드를 실행했는지 알아내는 것이 불가능합니까?
답변1
프로세스가 오래 지속되고 확인할 시간이 있으면 Chris의 답변이 작동하지만 단기 실행 명령인 경우 프로세스가 아직 살아있는 동안 이를 파악하기 어려울 수 있습니다.
이 문제를 해결하는 또 다른 방법은 프로그램 주위에 "래퍼"를 두는 것입니다.
호출된 프로그램이 이라고 가정합니다 /usr/bin/someprog
.
- 이동하다.
/usr/bin/someprog
/usr/bin/someprog.orig
/usr/bin/someprog
예를 들어 다음과 같이 스크립트로 생성합니다 .
#!/bin/sh
echo "My pid: $$" >> /tmp/someprog.log
ps -ef --forest >> /tmp/someprog.log
exec /usr/bin/someprog.orig
- 그런 다음
chmod a+x /usr/bin/someprog
그러면 프로세스 트리가 덤프되어 에 저장됩니다 /tmp/someprog.log
. 그런 다음 트리를 보고 무엇이 생성되는지 확인할 수 있습니다.
답변2
상위 PID(PPID)를 찾고 있는 것 같습니다.
$ ps -o ppid -p 5743
PPID
219
귀하께서 다음과 같은 사항도 언급하셨기 때문입니다 /proc
.
$ awk '{ print $4 }' /proc/5743/stat
219