-9 프로그램을 죽여도 여전히 중단됩니다


11

이전에 KUbuntu에서 제출 한 모든 백그라운드 작업을 종료하려고했습니다.

kill -9 $(jobs -p)

이 명령은 즉시 다음과 같은 메시지를 표시했지만

[1] myjob1을 죽였습니다.

[2] myjob2를 죽였다

여전히 프로세스가 top의 출력에 매달려 있고 CPU 및 메모리 사용량이 가동 시간의 출력 및 비어있는 상태로 변경되지 않는 것을 볼 수 있습니다.

그래서 나는 그들을 제대로 죽이지 않았을 것 같아요. 누군가 내게 무슨 일이 일어나고 어떻게해야하는지 설명해 주시겠습니까?

k를 입력하고 PID를 입력하면 프로세스를 하나씩 죽일 수 있다는 것을 알았습니다. 명령 kill과 다른 점은 무엇입니까?

또한 킬 -9를 권장하지 않는 온라인 http://www.ruhr.de/home/smallo/award.html 어딘가를 찾았습니다.

Kill -9 form letter의 쓸모없는 사용

(견적 가증)

아니, 아니. kill -9를 사용하지 마십시오.

프로세스가 깨끗하게 할 수있는 기회를주지 않습니다.

1) 소켓 연결 종료

2) 임시 파일 정리

3) 어린이들에게 멀리 가고 있음을 알리십시오.

4) 단말기 특성 재설정

등등. 등등.

일반적으로 15를 보내고 1 초 또는 2 초 정도 기다립니다. 그래도 문제가 해결되지 않으면 2를 보내십시오. 그래도 문제가 해결되지 않으면 1을 보내십시오. 그래도 문제가 해결되지 않으면 프로그램이 제대로 작동하지 않으므로 BINARY를 제거하십시오!

kill -9를 사용하지 마십시오. 화분을 정리하기 위해 콤바인 수확기를 꺼내지 마십시오.

이것이 사실입니까? "15 보내기", "2 보내기"및 "1 보내기"는 무엇을 의미합니까? 명령 자체 또는 "kill -15 PID", "kill -2 PID"및 "kill -1 PID"입니까?

감사합니다.


바이너리 (실행 파일)를 제거해도 프로세스가 종료되지는 않습니다. 파일 시스템은 프로세스가 해당 파일을 사용하고 있음을 알고 파일을 제거한 후에도 프로세스가 파일을 "보도록"합니다.
Jeppe Stig Nielsen 10

답변:


9

프로세스가 종료되었을 수 있지만 "좀비 프로세스"이므로 프로세스 테이블 항목에 계속 나타납니다. 하위 프로세스가 종료되고 완전히 사라지고 (프로세스 테이블 항목 제외) 상위 프로세스가 대기 상태 중 하나를 통해 종료 상태를 페치 할 수없는 경우이를 좀비라고합니다. 이미 종료되었으므로 작동합니다. 당신이해야 할 일은 부모 프로세스를 찾아서 하나의 클린을 죽여서 kill-9를 사용하지 않는 것입니다.

좀비를 죽이는 간단한 두 단계는 다음과 같습니다.

  1. 부모가 여전히 살아 있다면 죽이십시오 (또는 SIGHUP 만 있으면됩니다)
  2. 숫자 1이 실패하면, 커널에 버그가있는 것입니다. 재부팅은 당신의 친구입니다.

나는 명령 줄과 배경으로 직업을 제출한다. 부모는 무엇인가? 부모가 있다면 어떻게 찾을 수 있습니까?
Tim

-f상위 프로세스를 보려면 ps에 플래그를 사용하십시오 .
Jack M.

6

man kill사용 가능한 다양한 신호의 정의를 참조하십시오 .

  • 15는 SIGTERM 이며 프로그램 종료를 요청합니다.
  • 2는 SIGINT 이며 Control-C와 같습니다.
  • 1은 SIGHUP 이며 터미널이 전화를 끊었 음을 나타냅니다.

SIGTERM은 "현재 작업을 끝내고 종료 한 다음 다시 시작하지 마십시오"로 해석 될 수 있습니다. SIGHUP은 더 이상 듣고 있지 않다는 것을 의미합니다 (서버 프로세스는 콘솔 출력을 중단하고 계속 실행하여 SIGHUP에 합법적으로 반응 할 수 있음).

  • 9는 SIGKILL 이며 프로세스가 내부적으로 처리 및 처리 할 수없는 유일한 프로세스라는 점에서 특별합니다. 커널이 프로세스 제어를 절대로 리턴하지 않아서 정리할 기회가 없습니다.

k를 입력하고 PID를 입력하면 프로세스를 하나씩 죽일 수 있습니다. 이것은 kill 명령의 일부 옵션과 동일합니까?
Tim

예, top은 kill과 마찬가지로 프로세스에 신호를 보냅니다. AFAICT, 상단에서 사용하는 기본 신호는 15 (SIGTERM)입니다.
puetzk


1

"kill -9"를 입력하는 대신 "kill -1"또는 "kill -15"유형을 의미합니다. Kill -9는 실행중인 프로세스의 선두에있는 하드 코어 탄환으로, 메모리 누수를 유발할 수있는 더러운 상태에서 죽입니다.

kill -9를 입력했는데 작동하지 않는 경우 프로세스가 다시 생성되지 않고 프로세스를 종료 할 수있는 권한이 있는지 확인하려고합니다.


프로세스가 다시 생성되지 않도록하려면 어떻게 하시겠습니까? 프로세스를 소유하고 있으므로 해당 프로세스를 종료 할 수있는 권한이 있습니까?
Tim

프로세스 번호가 다른 경우 프로세스 번호가 달라야합니다. 따라서 ps -Al을 수행하고 processA가 표시되면 -9 processA를 종료 한 다음 ps -Al을 수행하고 프로세스 큐에 여전히 processA가 있으면 새 프로세스가 아닌 SAME 프로세스 A인지 확인하십시오.
Satanicpuppy

프로세스를 종료 할 권한이 없는지 알려줍니다.
Satanicpuppy

0

신호 9는 SIGKILL입니다. SIGKILL을 보내면 OS가 즉시 프로세스를 종료하도록 요청합니다. 프로세스는 사전에 통지되지 않으며 자체적으로 정리할 기회가 없습니다.

신호 15는 SIGTERM입니다. SIGTERM을 전송하면 OS에 프로세스 종료를 요청합니다.

OS에서 프로세스가 IO를 수행한다고 생각하거나 Zombie (부모가 정리하지 않은 하위 프로세스) 인 경우 SIGKILL이 무시 될 수 있습니다.

응용 프로그램에서는 SIGTERM을 무시할 수 있지만 프로그램이 여전히 실행중인 경우 OS가 종료 중에 SIGTERM을 전송 한 다음 SIGKILL을 실행하므로 응용 프로그램에서이를 수행하지 않는 것이 좋습니다.

참고 : 명령 줄 kill은 항상 OS에게 응용 프로그램에 신호를 보내도록 요청합니다. 프로세스를 소유 한 사람 등을 기반으로하거나하지 않을 수도 있습니다 ...

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