답변:
일반적으로 대상 프로세스가 자체적으로 정리 될 수 있도록하기 위해 ( ) 전에 ( ) 또는 (대부분의 시스템에서 kill
짧게)를 사용해야 합니다. 프로세스는 캐치하거나 무시할 수 없지만 캐치 할 수 있으며 종종 캐치 할 수 있습니다 . 프로세스가 수행중인 작업을 완료하고 정리할 기회를 프로세스에 제공하지 않으면 손상된 파일 (또는 다른 상태)이 그 주위에 남을 수 있습니다. 다시 시작하면 이해할 수 없습니다.kill -s TERM
kill -15
kill -9
kill -s KILL
SIGKILL
SIGTERM
strace
/ truss
, ltrace
그리고 gdb
일반적으로 멈춤 프로세스가 멈춘 이유를 찾는 좋은 아이디어입니다. ( truss -u
Solaris에서는 특히 유용합니다. ltrace
라이브러리 호출에 사용할 수없는 형식으로 인수를 너무 자주 제시하는 경우가 많습니다.) Solaris에는 유용한 /proc
기반 도구가 있으며 그 중 일부는 Linux로 이식되었습니다. ( pstack
종종 도움이 됨).
kill -9
최후의 휴양지 종결 자로서 최후의 휴양지에 중점을두고있다; 마지막 리조트 이전에 사용하는 관리자 a) 관리자를 너무 잘 이해하지 못하며 b) 프로덕션 시스템에 있지 않아야합니다.
Randal Schwartz는 자주 "x의 쓸모없는 사용"을 목록에 게시했습니다. 그러한 게시물 중 하나가에 관한 것 kill -9
입니다. 여기에는 이유와 따르는 레시피가 포함됩니다. 다음은 재구성 된 버전입니다 (아래 인용).
(견적 가증)
아니, 아니. kill -9를 사용하지 마십시오.
프로세스가 깨끗하게 할 수있는 기회를주지 않습니다.
1) 소켓 연결 종료
2) 임시 파일 정리
3) 어린이들에게 멀리 가고 있음을 알리십시오.
4) 단말기 특성 재설정
등등. 등등.
일반적으로 15를 보내고 1 초 또는 2 초 정도 기다립니다. 그래도 문제가 해결되지 않으면 2를 보내십시오. 그래도 문제가 해결되지 않으면 1을 보내십시오. 그래도 문제가 해결되지 않으면 프로그램이 제대로 작동하지 않으므로 BINARY를 제거하십시오!
kill -9를 사용하지 마십시오. 화분을 정리하기 위해 콤바인 수확기를 꺼내지 마십시오.
쓸모없는 Usenet의 또 다른 사용,
(.서명)
항상 확인해야한다 kill -9
항상 전원 케이블을 당겨 종료에 확인을해야처럼. 그것은 반사회적 일 수 있고, 약간의 회복을 남겨 두어야하지만, 작동해야하며, 참을성이없는 사람들을위한 강력한 도구입니다.
나는 이것을 일반 살인 (15)을 먼저 시도 할 누군가라고 말한다. 왜냐하면 프로그램이 약간의 정리를 할 수있는 기회를주기 때문이다. 아마도 "시그 15에서 나가기"라는 로그에 쓸 것이다. 그러나 나는 살인 사건 9에 대한 나쁜 행동에 대한 불만을 받아들이지 않을 것입니다.
그 이유는 많은 고객이 프로그래머가 원하지 않는 일을하는 것입니다. 랜덤 킬 -9 테스트는 훌륭하고 공정한 테스트 시나리오이며 시스템에서 처리하지 않으면 시스템이 고장난 것입니다.
kill -9
단지 등이 플러그를 해내 확인을하지 않습니다. 물론 선택의 여지가없는 상황이 있지만 이것이 최후의 수단이되어야합니다. 물론 전원 케이블을 잡아 당기거나 kill -9
응용 프로그램이나 OS가 제대로 다시 시작되지 못하게하는 것과 같은 부작용이 없어야하지만 똥이 발생하고 권장 방법 ( kill [-15]
) 또는 정기적 종료를 사용하면 다음과 같은 경우 발생할 수있는 혼란을 피할 수 있습니다 이런 식으로 프로그램과 OS를 정기적으로 중단시킵니다. 어쨌든 코드 견고성과 상관없이 데이터를 잃을 위험이 항상 있습니다.
식기 세척기에 주방 도구를 던지는 것과 거의 같은 방식으로 kill -9를 사용합니다. 주방 도구가 식기 세척기에 의해 망가지면 원하지 않습니다.
동일은 간다 대부분의 프로그램 (심지어 데이터베이스) : 나는 상황이 엉망이하지 않고 그들을 죽일 수 없어 난 정말 그들을 사용하지 않으려면. (그리고 당신이 그들이 아닌 데이터를 유지하는 척하는 비 데이터베이스 중 하나를 사용한다면 : 글쎄, 당신이하고있는 일에 대해 생각하기 시작할 때가 된 것 같습니다).
현실 세계에서 물건은 어떤 이유로 든 언제든지 내려갈 수 있기 때문입니다.
사람들 은 충돌에 견딜 수있는 소프트웨어를 작성 해야합니다 . 특히 서버에서. 일이 깨지거나 충돌하는 것으로 가정하는 소프트웨어를 설계하는 방법을 배워야합니다.
데스크톱 소프트웨어도 마찬가지입니다. 브라우저를 종료하려면 일반적으로 AGES를 종료해야합니다. 없다 아무것도 내 브라우저가 필요 즉 초에 대부분의 부부보다 더해야 할이. 종료를 요청하면 즉시 종료해야합니다. 그렇지 않은 경우, 우리는 kill -9를 꺼내어 만듭니다.
kill -9
프로세스가 종료 <defunct>
되어 종료 할 수없는 경우 전혀 작동하지 않는 경우가 있습니다.
부모가 init 인 <defunct> 프로세스를 어떻게 죽일 수 있습니까?
프로세스의 기능 상실은 무엇이며 왜 프로세스가 종료되지 않습니까?
당신이 시도하기 전에 그래서 프로세스 실행 그의 부모가 무엇인지 확인하고 시도 (TERM) 또는 (INT) 그리고 마지막으로 자신의 부모에 (KILL)를.kill -9
<defunct>
ps -ef
-15
-2
-9
참고 : 어떤 ps -ef
않습니다 .
나중에 편집 및주의 : 프로세스, 부모 또는 자식 프로세스를 종료 할 때 파일을 열거 나 손상시킬 수 있고, 연결이 완료되지 않거나 데이터베이스가 손상 될 수 kill -9
있으므로 프로세스를 위해 무엇을해야하는지 알지 못하는 경우 최후의 수단으로 만 사용하기 때문에주의해서 진행하십시오 , kill을 실행해야하는 경우 사용하기 전에 위에서 지정한 신호를 사용하십시오.-9 (KILL)
절대로하지 마십시오 kill -9 1
. 또한 mount와 같은 특정 프로세스에서 종료를 피하십시오. 많은 프로세스를 종료해야하는 경우 (예 : X 세션이 중단되고 특정 사용자의 모든 프로세스를 종료해야하는 경우) 프로세스 순서를 반대로 바꿉니다. 예를 들면 다음과 같습니다.
ps -ef|remove all processes not matching a certain criteria| awk '{print $2}'|ruby -e '$A=stdin.readlines; A.reverse.each{|a| puts "kill -9 #{a}"}'|bash
명심 kill
프로세스를 중지하고 자원을 해제하지 않습니다. 프로세스에 SIGKILL 신호를 보내기 만하면됩니다. 중단 된 프로세스로 마무리 할 수 있습니다.
kill -9 1
대부분의 유니스에서는 무시됩니다. 피할 kill -9
필요 mount
는 없지만 그 어느 것도 지적 하지 않아도됩니다 . "프로세스 순서를 반대로"한다는 것이 무슨 의미인지 잘 모르겠습니다. kill -9
불만을 제기 할 기회를주지 않고 프로세스를 중지 (종료)합니다. 그러나 프로세스가 인터럽트 불가능한 시스템 호출 인 경우 종료는 즉시 수행되지 않습니다 . 프로세스를 종료하면 kill -9
대부분의 리소스가 해제되지만 전부는 아닙니다 .
willy-nilly 프로세스를 강제 종료하는 것은 순조로운 이동이 아닙니다. 데이터가 손실 될 수 있고, 제대로 설계되지 않은 앱은 다시 설치하지 않고 해결할 수없는 미묘한 방식으로 깨질 수 있습니다. 주어진 상황. 그리고 무엇이 위험에 처할 것인가. 사용자는 프로세스가 무엇인지, 무엇을해야하는지, 그리고 제약 조건이 무엇인지 (디스크 IOPS, rss / swap) 알고 있어야하며 장기 실행 프로세스에 소요되는 시간 (파일 복사, mp3 재 인코딩, 이메일 마이그레이션, 백업, [좋아하는 타임 싱크].)
또한, SIGKILL
pid로 보내는 것은 그것을 죽일 것을 보장하지 않습니다. syscall에 걸려 있거나 이미 좀비 ( Z
in ps
) 인 경우 계속 좀비가 될 수 있습니다. ^ Z는 오래 실행되는 프로세스이며 bg
시도하기 전에 잊어 버리는 경우가 종종 kill -9
있습니다. 간단한 방법으로 fg
stdin / stdout을 다시 연결하고 프로세스를 차단 해제 한 다음 일반적으로 프로세스를 종료합니다. 다른 곳에 또는 다른 형태의 커널 교착 상태에 빠지면 재부팅만으로 프로세스를 제거 할 수 있습니다. (좀비 프로세스는 SIGKILL
커널에 의해 처리 된 후 이미 죽었습니다 (추가 사용자 랜드 코드는 실행되지 않음). 일반적으로 프로세스가 종료되지 않는 커널 이유 (시스템 호출을 마치기 위해 "차단 된"것과 유사 함)가 있습니다.
당신이 프로세스와 모든 자식을 죽이고 싶어 경우에도, 전화의 습관을 kill
와 부정 PID,뿐만 아니라 PID 자체 . 이의 보장은 없습니다 SIGHUP
, SIGPIPE
또는 SIGINT
다른 신호는 후 청소 및 정리에 부인 프로세스 (잡종을 기억 하는가?) 성가신의 무리를 가지고.
보너스 악 : kill -9 -1
보다 약간 더 해 롭습니다 kill -9 1
(중요하지 않은 VM에서 일어나는 일을보고 싶지 않다면 루트로 사용하지 마십시오)
kill -9
일반적으로 프로세스를 원하지 않는 이유에 따르면 man 7 signal
:
SIGKILL 및 SIGSTOP 신호는 포착, 차단 또는 무시할 수 없습니다.
즉, 이러한 신호 중 하나를 수신하는 응용 프로그램은 종료 동작을 수행하기 위해 신호를 "잡을"수 없습니다.
kill -9
프로세스 를 실행하기 전에해야 할 일신호를 프로세스에 보내기 전에 다음을 확인해야합니다.
kill -9
프로세스에 전송 하면 본질적으로이 데이터가 손실됩니다.이 문제를 자동화하는 데 도움이되는 스크립트를 만들었습니다.
그것은 stackoverflow 와 매우 비슷한 질문에 대한 완전한 답변 2 를 기반으로 합니다.
모든 설명을 읽을 수 있습니다. 난 그냥 추천 할 것입니다 요약하자면 SIGTERM
및 SIGKILL
, 또는 SIGTERM
, SIGINT
하고 SIGKILL
. 그러나 나는 완전한 대답에서 더 많은 옵션을 제공합니다.
, 그것은 github의의에서 (복제)를 다운로드 해 주시기 바랍니다 killgracefully하는 저장소 1