프로세스 생성 시 pid 및 이름 인쇄

프로세스 생성 시 pid 및 이름 인쇄

문제의 관점에서여기pidof, OP는 쉘 스크립트에서 프로세스의 pid를 반복적으로 폴링하려고 합니다. 물론 이것은 pidof프로그램의 새로운 프로세스가 초당 여러 번 시작되어야 하기 때문에 비효율적입니다(이것이 질문의 CPU 스파이크의 원인인지는 모르겠지만 가능해 보입니다).

일반적으로 쉘 스크립트에서 이러한 종류의 문제를 해결하는 방법은 단일 프로그램을 사용하여 필요한 데이터를 출력한 stdout다음 필요한 경우 일부 텍스트 처리를 수행하는 것입니다. 여기에는 더 많은 프로그램을 동시에 실행하는 것이 포함되지만 폴링 목적으로 새 프로세스가 지속적으로 생성되지 않으므로 CPU 사용량이 적을 수 있습니다.

따라서 위의 문제에 대한 한 가지 해결책은 프로세스가 생성될 때 프로세스의 이름과 PID를 출력하는 일부 프로그램을 사용하는 것입니다. 그러면 다음과 같이 할 수 있습니다:

pids-names |
  grep some_program |
  cut -f 2 |
  while read pid; do
    process-pid "$pid"
  done

이에 대한 문제는 보다 기본적인 질문이 제기된다는 것입니다. PID와 프로세스 이름이 생성될 때 어떻게 인쇄합니까?

라는 프로그램을 찾았 는데, 문제는 반복적으로 실행되는 스크립트 ps-watcher일 뿐이 라 실제로 문제가 해결되지는 않는다는 것입니다. 또 다른 옵션은 로그가 직접 전달되는 경우를 사용하는 것입니다 . 이상적인 솔루션은 이보다 더 간단하고 이식성이 높지만 이것이 최선의 옵션이라면 받아들이겠습니다.perlpsauditdtail -fauditd

답변1

Linux 관련 답변:

perf-tools에는모니터링 실행그것이 바로 그것이 하는 일입니다. ftrace와 같은 다양한 Linux 관련 기능을 사용합니다. 데비안에서는 다음 위치에 있습니다.성능 도구가 불안정합니다.팩.

man cat예를 들어 다른 터미널에서 실행했습니다.

root@Zia:~# execsnoop 
TIME        PID   PPID ARGS
17:24:26  14189  12878 man cat 
17:24:26  14196  14189 tbl 
17:24:26  14195  14189 preconv -e UTF-8 
17:24:26  14199  14189 /bin/sh /usr/bin/nroff -mandoc -Tutf8 
17:24:26  14200  14189 less 
17:24:26  14201  14199 locale charmap 
17:24:26  14202  14199 groff -mtty-char -Tutf8 -mandoc 
17:24:26  14203  14202 troff -mtty-char -mandoc -Tutf8 
17:24:26  14204  14202 grotty 

이 작업을 수행하는 휴대용 방법이 있는지 의심됩니다.

답변2

거기올바른 길TM이를 수행하는 것은 실제로 실행 중인 시스템과 커널에 따라 크게 달라집니다.DTraceSolaris, Free/NetBSD 및 Linux에서 실행해야 합니다.

특히 Linux의 경우 ftrace(컴파일 시 활성화해야 함 - 일반적으로 이 경우) 또는 netlink를 통한 proc 이벤트를 사용할 수 있습니다.그래서 대답은질문에 대한 자세한 내용(투표하는 것을 잊지 말고 답변 점수를 수락하세요. ~30 대 0이 흥미로워 보입니다). 가난한 사람의 추적기는 구현이 가능할 수도 있습니다 strace -eexec,fork(불합리한 오버헤드가 있음에도 불구하고).

관련 정보