커널에 마지막으로 할당된 PID를 모니터링하는 방법은 무엇입니까?

커널에 마지막으로 할당된 PID를 모니터링하는 방법은 무엇입니까?

프로세스 생성을 모니터링하기 위해 커널이 할당한 마지막 PID를 주기적으로 쓰고 싶습니다.어느파일 타임스탬프가 있는 시스템의 프로세스(PID 모니터에 의해 생성된 프로세스뿐만 아니라)(추가 프로세스 생성을 방지하려면 데몬을 사용) 어떤 언어든 가능하지만 POSIX 셸에서는 이것이 가능해야 한다고 생각합니다.

답변1

그러면 Bash에서 매초마다 타임스탬프와 마지막 PID 파일이 저장됩니다.ns_last_pid시스템 제어:

이 sysctl을 사용하여 작업의 현재 pid 네임스페이스에 할당된 마지막 pid입니다.

old=""
while read < /proc/sys/kernel/ns_last_pid
do
    if [ "$REPLY" != "$old" ]
    then
        printf '%(%s)T %d\n' -1 "$REPLY"
        old=$REPLY
    fi
    read -t 1 || true
done > pids.log

질문:

답변2

POSIX는 커널이 할당한 마지막 PID를 얻는 방법을 제공하지 않으므로 이식 가능한 답변을 제공할 수 없습니다.

이것은 dtrace를 구현하는 모든 시스템(Solaris, FreeBSD, NetBSD, Mac OS X, 최신 UEK가 포함된 Oracle Linux 및 기타 유사한 Illumos 기반 운영 체제, 최신 UEK가 포함된 Linux)에서 작동해야 하는 원라이너입니다.dtrace4linux)

# dtrace -qn 'proc:::exec-success { printf("%Y - %d\n",walltimestamp,pid); }'
2013 May 15 00:48:47 - 1276
2013 May 15 00:48:49 - 1277
2013 May 15 00:48:52 - 1278

편집하다:

Linux에서는 또 다른 옵션을 사용하는 것입니다.시스템 수도꼭지가능한 경우 이 명령(테스트되지 않음)은 다음과 유사한 출력을 제공해야 합니다.

# stap -e 'probe syscall.execve { printf("%s - %d\n",ctime(gettimeofday_s()),pid()); }'

관련 정보