2009-06-14 2 views
3

많은 질문과 답변을 알고 있지만 효율적이고 강력한 솔루션을 찾고 있습니다. 나는 프로세스를 죽일 필요가 있으며, 모든 것은 코코아 애플리케이션 내에서 자식 프로세스이다. 나는 프로세스 ID를 가지고 무엇을 내가 코드에 대해 생각하는 것은 내 응용 프로그램 내에서 너무Mac OS X : Cocoa 응용 프로그램 내에서 전체 프로세스 트리를 종료/종료하는 가장 빠른 방법

kill -- -<parent PID> 

같은 kill 명령을 실행하는 것입니다 ...하지만 나에게 몹시 해키 잔인한 것 같다. 더 나은 해결책이 없을까요? Carbon의 KillProcess()와 Process Manager 친구들은 프로세스 트리 표현을 직접 제작하지 않는 한별로 도움이되지 않습니다. 내가 놓친 게 있니?

나는 또한 PID를 기반으로 종료 애플 이벤트를 보낼 수있는 몇 가지 코드가 있습니다. 상위 프로세스에 의해 정의 된 트리의 각 프로세스에이를 전송할 수있는 것이 더 좋을 것입니다. 그러나 그것은 단지 좋은 것입니다. 첫 번째 질문에 대한 대답은 "요점"을 얻습니다.

#include <signal.h> 
#include <unistd.h> 

/* ... */ 

killpg(getpgid(pid), SIGTERM); 

적절한 오류 검사는 물론, 수행해야합니다,하지만 당신은 요점을 얻어야한다 :

답변

8

당신은 그 그룹의 과정과 모든 것을 종료 killpg는 사용할 수 있습니다. 자세한 내용은 설명서 페이지 kill(2)killpg(2)을 참조하십시오.

+0

빠른 답장을 보내 주셔서 감사합니다. 작은 추가 : 주어진 ID에 대한 프로세스 그룹 ID를 얻는 올바른 함수는 getpgrp가 아닌 getpgid입니다. http://developer.apple.com/documentation/Darwin/Reference/ManPages/man2/getpgrp.2.html –

+0

아, 맞아요! 죄송합니다. getpgrp()는 호출자의 프로세스 그룹을 반환합니다. –

+0

"코드 샘플"의 작은 오타가 killpg()이어야합니다. –

0

마지막으로 (몇 년 전 이었지만 많이 변경되지는 않았지만) 내가 찾은 최상의 솔루션은 시스템 킬 명령을 호출 한 것입니다.

system("ps axwww | grep -i CoreServices/Dock.app/Contents/MacOS/Dock | grep -v grep | awk '{print $1}' | xargs kill -3"); 
+0

killpg (2) –

관련 문제