OS X은 종료 및 강제 종료 명령에 대해 어떤 신호를 보내나요?

OS X은 종료 및 강제 종료 명령에 대해 어떤 신호를 보내나요?

사용자가 대상 애플리케이션 외부(예: Activity Monitor)에서 Quit또는 명령을 내릴 때 뒤에서 무슨 일이 발생합니까 ?Force Quit

답변1

일반적으로 "Quit" 작업은 다음과 같습니다.~ 아니다신호; 이것은애플 이벤트는 AppleScript 스크립팅과 이미 실행 중인 응용 프로그램에서 파일이나 URL을 여는 데 사용되는 것과 동일한 유형의 프로세스 간 통신이며 Unix가 아닌 Mac OS 계보에서 유래되었습니다.

프로세스는 Apple 이벤트를 수신하기 위해 구체적으로 등록해야 하며 이러한 프로세스는 GUI 프로세스이거나 최소한 데스크톱 세션과 연결되어 있습니다(활동 모니터 외부에서 종료하라는 메시지를 받을 수 있는 유일한 방법입니다).

그러나 활동 모니터에서 프로세스를 "종료"하고 해당 프로세스가~ 아니다Apple 이벤트를 수신하도록 등록된 경우 대신 SIGTERM(15)을 보냅니다.

답변2

dtrace를 사용하여 어떤 신호가 프로세스로 전송되는지 확인할 수 있습니다.

sudo dtrace -n 'proc:::signal-send /pid/ { printf("%s -%d %d", execname, args[2], args[1]->pr_pid); }'

Dock에 표시된 응용 프로그램을 강제 종료하는 경우 신호는 일반적으로 -15(TERM)입니다. 그러나 Activity Monitor에서 백그라운드 프로세스를 강제 종료하면 일반적으로 -9(KILL)가 됩니다.

답변3

으로 전송된 GUI 응용 프로그램에 대한 강제 종료 이벤트를 볼 수 있습니다 system.log. 또는 이 스레드에 게시된 대로 dtrace를 사용하세요. dtrace를 사용하면 더 세분성을 얻을 수 있지만 루트 권한이 필요합니다.

관련 정보