here 질문 에서 OP는 pidof쉘 스크립트를 사용하여 프로세스의 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의 문제는 perl반복적으로 실행 되는 스크립트 일 뿐이 ps므로 실제로 문제를 해결하지 못한다는 것입니다. 다른 옵션은 auditd로그를 통해 직접 처리 한 경우 사용할 수 있는 옵션입니다 tail -f. 이상적인 솔루션은 이것보다 더 간단하고 휴대하기 쉽지만 auditd최선의 선택이라면 솔루션 을 받아 들일 것입니다.
dbus.
fork다음 새 프로그램이exec패밀리 의 구성원을 사용하여 시작 된다는 것 입니다. 따라서 .가exec*아닌 을 기록하고 싶을 것입니다fork.