상위 프로세스에서 호출한 후 즉시 하위 프로세스를 프로그래밍 방식으로 종료하는 방법은 무엇입니까?

상위 프로세스에서 호출한 후 즉시 하위 프로세스를 프로그래밍 방식으로 종료하는 방법은 무엇입니까?

애플리케이션 내에서 시작된 프로세스를 프로그래밍 방식으로 종료하는 방법은 무엇입니까? 명확히 하자면, 때때로 WebKit 하위 프로세스를 시작하는 애플리케이션이 있으며, 이 하위 프로세스가 시작된 직후(즉, 즉시는 아니지만 약 3초)에 이 하위 프로세스를 종료하고 싶습니다.

현재 내가 하는 일은 WebKit의 출력을 grep한 ps aux다음 PID를 사용하여 모든 프로세스 바이너리를 종료하거나 종료하는 것인데, 이는 자동화할 수 있어야 할 것 같습니다. 예를 들어 하위 프로세스가 5분마다 시작된다는 것을 알고 있는 경우 해당 하위 프로세스의 새 인스턴스를 확인하고 프로그래밍 방식으로 종료하기 위해 백그라운드에서 계속 실행되도록 하려면 어떤 도구를 사용할 수 있습니까? (그런데 pkill저는 pgrep못쓰겠어요.)

답변1

비결은 올바른 프로세스를 종료하고 원하는 프로세스만 종료하는지 확인하는 것입니다. 간단해 보이지만 많은 사람들이 이를 혼동합니다. 프로그래밍 방식으로 이 작업을 수행하는 가장 나쁜 방법은 이름을 사용하여 수행하는 것입니다.

좋아, 부모를 수정할 수 없다고 말씀하셨군요. 가능하다면 올바른 방법은 하위 PID가 있으므로 fork() 호출의 반환 값을 가져오는 것입니다. PID는 고유하지만 이름(ps aux | grep을 사용하여 수행하는 작업인 것 같습니다)은 고유하지 않습니다.

상위 프로세스의 PID를 알고 있다고 가정하면 pgrep -P가 이를 달성하는 방법일 수 있습니다. 이는 상위 프로세스의 모든 하위 프로세스와 일치하므로 하위 프로세스가 있다고 가정합니다.

이상하게도 killall은 age와 일치하고 pgrep/pkill은 부모와 일치하지만 다른 쪽이 수행하는 작업을 수행하지 않습니다. 언젠가는 이 문제가 해결될 수도 있습니다.

관련 정보