2010-06-05 3 views
6

어떤 문제로 인해 프로덕션 응용 프로그램에서 (정확히는 Linux에서) kill -9이 발생할 수 있습니까?kill -9 및 프로덕션 응용 프로그램

정기적 인 작업을하는 응용 프로그램이 있습니다.이 작업을 중단하는 데 오랜 시간이 걸리며, 일부 작업이 중단되는지는 신경 쓰지 않습니다. 새로운 프로세스로 작업을 완료 할 수 있습니다. 그렇다면 바로 kill -9을 사용하여 즉시 중지하거나 심각한 OS 문제를 일으킬 수 있습니까?

응용 프로그램이 틀려서

는 BOFH은 "죽일 -9"수 폭주 작업자 프로세스를 모든 클라이언트를 찢어에 대한 걱정없이, 단지 예, Unicorn를 들어

은 정상 작업 절차로 사용 하나.

그러나이 article 주장 :

-9 (또는 KILL) 인수 죽일 (1) 유닉스 시스템에서 사용해서는 안됩니다

PS : 이해 kill -9 할 수 없음을 나타 응용 프로그램에서 처리 할 수 ​​있지만 응용 프로그램에 따라 문제가 발생할 수 있음을 알고 있습니다. OS 레벨에서 몇 가지 문제가 발생할 수 있습니까? shared memory segments active, lingering sockets은 나에게 위험한 소리입니다.

+1

일반적으로'kill -9'를 사용하지 말라는 충고는 좋은 것입니다. 당신이 언제 소프트웨어에 대해 알고 있으면 그 조언을 무시할 지 알 때, 걱정을 멈추고 원하는 것을 죽여 버릴 수 있습니다. –

답변

1

어떤 응용 프로그램인지에 따라 다릅니다.

데이터베이스와 같은 어떤 것이 데이터를 영구적 인 트랜잭션 로그에 동시에 쓰지 않으면 데이터를 잃을 수도 있고 다음 번에 시작하는 데 더 오래 걸릴 수도 있습니다.

Crash-only은 좋은 원칙이지만 현재는 거의 적용되지 않습니다.

예를 들어, mysql 데이터베이스는 "crash only"가 아니며 kill -9로 종료하면 설정에 따라 시작 시간이 오래 걸리고 (정상 종료보다) 또는 데이터 손실이 발생합니다. 그리고 어느 정도까지 행운).

한편, Cassandra은 실제로 종료 메커니즘으로 kill -9를 사용하도록 장려합니다. 그것은 아무것도 지원하지 않습니다.

4

kill -9은 응용 프로그램에 정상적으로 종료 할 기회가 없습니다.

일반적으로 응용 프로그램은 SIGINT/SIGTERM을 catch하고 깨끗하게 종료 할 수 있습니다 (파일 닫기, 데이터 저장 등). 응용 프로그램은 SIGKILL (이는 kill -9과 함께 발생 함)을 인식 할 수 없으므로이 (선택 사항) 정리를 수행 할 수 없습니다.

더 나은 방법은 표준 kill을 사용하는 것이며 응용 프로그램이 응답하지 않는 경우에는 kill -9을 사용하십시오.

0

응용 프로그램에서 KILL 신호를 포착 할 수 없습니다. 응용 프로그램을 죽일 때 응용 프로그램이 복잡한 데이터 구조를 디스크에 쓰는 중일 경우 구조가 절반 만 기록되어 데이터 파일이 손상 될 수 있습니다. 일반적으로 USER1과 같은 다른 신호를 "중지"신호로 구현하는 것이 가장 좋습니다.이 신호가 잡히면 응용 프로그램이 제어 된 방식으로 종료됩니다.

2

kill -9 "심각한 OS 문제"가 발생하지 않습니다. 그러나 프로세스가 즉시 중지되므로 데이터가 이상한 상태로 남을 수 있습니다.

관련 문제