“강제 종료”보다 강력한 것이 있습니까?


24

나는 죽지 않는 앱을 ​​가지고 있습니다 : 그것은 도크에서 사라졌지 만 창은 여전히 ​​남아 있습니다 (비치 볼과 함께 마우스를 올리면). CPU를 사용하지 않지만 멀리 가고 싶습니다.

실제로 앱 을 강제 종료하기 위해 "강제 종료"보다 강력한 것이 있습니까?


그것이 더 강한 지 확실하지 않지만 앱> 유틸리티> 활동 모니터를 사용해보십시오. 프로세스를 찾아 강제 종료하십시오. 그래도 문제가 해결되지 않으면 프로세스 번호를 확인하고 터미널로 이동하여 "kill #"을 입력하십시오. 여기서 #은 프로세스 번호입니다. HTH
David DelMonte

6
전원 버튼?
다니엘

1
@DanielLawson 불행히도, 이러한 상황은 보통 그 결과를 낳습니다.
CajunLuke

1
데이비드 : 저는 애플이 "강제 종료"라고 부르는 것은 당신이 어떻게 접근하든 동일하다고 생각하지만, 효과도 없었습니다.
Ken

답변:


14

앱 이름을 알고있는 경우 활동 모니터에서 앱이 여전히 실행 중인지 확인하고 강제 종료를 시도 할 수 있습니다. 그래도 작동하지 않으면 앱의 프로세스 ID (pid)를 기록해 두십시오. 터미널로 이동 kill [pid]하여 "[pid]"를 앞에서 적어 둔 번호로 바꿉니다. 즉 직장, 시도하지 않으면 kill -3 [pid]그 일을하지 않는 경우 kill -9 [pid]. 프로세스가 (이 가능성이 아닌) 다른 사용자가 소유하는 경우, 당신은 교체해야 killsudo kill메시지가 표시되면 암호를 입력합니다.

앱이 활동 모니터에 표시되지 않거나 앱을 표시 할 수없는 kill경우, 창에 다른 곳이 남아있을 수 있으며 앱이 더 이상 실행되지 않습니다. 이 경우 때로는 (항상 그런 것은 아님) killall SystemUIServer또는로 작동 할 수 있습니다 killall Dock.

이 방법으로 문제가 해결되지 않으면 로그 아웃했다가 다시 로그인하거나 재부팅해야합니다. 이 시점에 도달 한 몇 번, 앱이 너무 멈춰서 로그 아웃 또는 종료를 막았으므로 하드 재부팅해야했습니다.


sudo변경 사항없이 프로세스를 소유하고 있음을 포함하여이 모든 것을 시도했습니다 . 윌 killall SystemUIServer창 위치를 잊고처럼, 내 다른 오픈 애플 리케이션의 어떤 영향을 미칩니 까?
Ken

2
gentmatt :에 따르면 kill -l-3은 SIGQUIT이고 -9는 SIGKILL ( " catchable , nonignorable kill")입니다.
Ken

1
@gentmatt 3은 프로세스에 신호를 차단하고 정리를 수행 할 수있는 기능을 제공하는 QUIT 신호입니다. 9는 KILL이 "잡을 수없고 무시할 수없는 것"입니다. 보낼 수있는 다른 신호들이 있습니다. 실행 man kill그들 모두를 볼 수 (상위 10 UNIX 이제까지 명령 최고의에서이다).
CajunLuke

1
나는 보통 -9를 죽입니다. -3는 "강제 종료"보다 강하지 않습니다
segfault

3
@BoTian True; 나는 -9로 바로 건너 뜁니다. 때로는 강제 종료를 전혀 신경 쓰지 않습니다. 그러나 자신이하는 일을 모르는 사용자에게는 효과가 있으며 해를 끼치 지 않습니다. 또한 오래 걸리지 않으므로 예상 결과 비율로 소비되는 시간이 그렇게 나쁘지는 않습니다.
CajunLuke

7

강제 종료 창 killallkill모든 보내기는 기본적으로 TERM 신호를 처리합니다. 그래도 killall -kill작동하지 않으면 사용할 수 있습니다 .

killall 유틸리티는 kill (1)에 의해 수행 된 pid에 의한 선택과 달리 이름으로 선택된 프로세스를 종료합니다. 기본적으로 procname 이름과 일치하는 killall 호출자와 동일한 실제 UID를 사용하여 모든 프로세스에 TERM 신호를 보냅니다. 수퍼 유저는 모든 프로세스를 종료 할 수 있습니다.

sudo dtrace -n 'proc:::signal-send /pid/ { printf("%s -%d %d",execname,args[2],args[1]->pr_pid); }'강제 종료 창에서 일부 응용 프로그램 을 실행 하고 종료하면 신호는 일반적으로 -15 (TERM)로 표시됩니다. 그러나 활동 모니터에서 백그라운드 프로세스 (또는 Dock에 표시되지 않은 응용 프로그램)를 종료하면 신호는 일반적으로 -9 (KILL)로 표시됩니다.

SIGTERM은 kill 또는 killall 명령에 의해 프로세스로 전송되는 기본 신호입니다. 프로세스가 종료되지만 SIGKILL 신호와 달리 프로세스에 의해 포착 및 해석 (또는 무시) 될 수 있습니다. 따라서 SIGTERM은 프로세스를 멋지게 종료하도록 요청하는 것과 유사하므로 파일을 정리하고 닫을 수 있습니다. 이러한 이유로 종료 중에 많은 Unix 시스템에서 init는 전원을 끄는 데 중요하지 않은 모든 프로세스에 SIGTERM을 발행하고 몇 초간 기다렸다가 SIGKILL을 발행하여 남아있는 프로세스를 강제로 종료합니다.


여기에 좋은 정보가 있지만 프로세스를 죽이는 변형은 전혀 영향을 미치지 않는 것 같습니다.
Ken

SIGKILL작동 하지 않으면 앱이 무정전 수면 상태 일 수 있으며 실제로 재부팅 할 수있는 작업이 없습니다.
Blacklight Shining

이것이 mail.app 또는 pages.app와 같은 사용자 응용 프로그램인지 또는 이것이 어떻게 든 Spotlight와 같은 시스템 프로세스인지 또는 Plex와 같은 응용 프로그램 백그라운드 프로세스인지 여부는 궁금합니다.
David DelMonte

6

강제 종료, 활동 모니터 kill및 기타 방법이 작동하지 않아 Mac이 종료되지 않는 상황이있었습니다.

이 경우에는 sudo shutdown -r now아무것도 할 수 없을 때 작동했으며 전원 버튼을 통한 강제 종료보다 낫습니다.


1

위의 답변에서와 같이 프로세스를 종료하는 가장 강력한 방법은 다음 SIGKILL과 같습니다 kill -9 process_id.

그러나 존재하지 않는 프로세스도 존재 Force Quit하지 않습니다 kill. 그들은 zombie프로세스 라고 불렀습니다 .

다음은 zombie2 분 동안 프로세스를 작성하는 간단한 스크립트입니다 .

perl -e 'if($p=fork) {print "unkillable pid:$p\n" ;system("ps -l"); sleep(120)}'

터미널에서 위의 스크립트를 실행하면 다음과 같이 출력됩니다.

     unkillable pid:50571
        UID   PID  PPID        F CPU PRI NI       SZ    RSS WCHAN     S             ADDR TTY           TIME CMD
        501 47380 47379     4006   0  31  0  2448416   2900 -      S                   0 ttys000    0:00.36 -bash
        501 50570 47380     4006   0  31  0  2443512   1424 -      S+                  0 ttys000    0:00.01 perl -e if($p=fork) {print "u
#THIS-> 501 50571 50570     2006   0   0  0        0      0 -      Z+                  0 ttys000    0:00.00 (perl)
        501 12795 12794     4006   0  31  0  2448296   1752 -      S+                  0 ttys001    0:00.75 -bash
        501 50123 50122     4006   0  31  0  2448296   2688 -      S+                  0 ttys002    0:00.14 -bash

처리 불가능한 프로세스 (이 경우 : 50571)의 상태 열을 확인하면 Zwhats mean 플래그가 표시 zombie됩니다.

kill신호 (예 :)를 보내려고 kill -9 50571하면 프로세스가 계속 존재합니다. 어쨌든 그것은 실제로 존재하지 않기 때문에 시스템을 많이 손상시키지 않습니다. 프로세스 테이블 만 차지합니다.

위의 예에서 120 초 안에 지워집니다.


0

이것이 당신이해야 할 일입니다.

  1. 활동 모니터에서 프로세스를 두 번 클릭하거나 정보 아이콘을 클릭하여 프로세스 창을여십시오.
  2. 프로세스 그룹 행에 프로세스 번호가 processName (####)으로 표시됩니다. 여기서 "####"은 프로세스 번호입니다.
  3. 터미널을 열고 따옴표없이 "sudo kill ####"을 입력하고 Enter 키를 누르십시오
  4. 비밀번호를 입력하면 터미널에 입력 내용이 표시되지 않습니다
  5. 프로세스가 종료되었습니다.

이와 같은 프로세스는 제거를 시도하는 경우 안전 모드에서 가장 잘 제거됩니다.

건배, 브라이언

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.