![kill -9 대신 kill -11을 사용하면 위험이 있습니까?](https://linux55.com/image/157362/kill%20-9%20%EB%8C%80%EC%8B%A0%20kill%20-11%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EB%A9%B4%20%EC%9C%84%ED%97%98%EC%9D%B4%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
나는 최근에 유틸리티가 내가 원하는 어떤 신호라도 보낼 수 있다는 것을 깨달았습니다 . 그래서 프로세스가 kill
필요할 때 (멈추거나 하는 일이 있을 때) 약간의 웃음을 위해 대신에 를 보냅니다( 대신 .)SIGKILL
SIGSEGV
kill -11
kill -9
그러나 이것이 나쁜 습관인지는 모르겠습니다. 그럼 kill -11
그보다 더 위험한 걸까요 kill -9
? 그렇다면 어떻게 해야 할까요?
답변1
이 SIGSEGV
신호는 커널에 의해 잘못된 가상 메모리 참조(세그먼트 오류)를 만든 프로세스로 전송됩니다.
전송이 SIGSEGV
더 "위험"할 수 있는 한 가지 방법은 공간이 부족한 파일 시스템에서 프로세스를 종료하는 경우입니다. 프로세스가 a를 수신할 때 기본 작업은 SIGSEGV
코어를 파일로 덤프한 다음 종료하는 것입니다. 코어 파일은 프로세스에 따라 매우 커질 수 있으며 파일 시스템을 가득 채울 수 있습니다.
@Janka가 이미 언급했듯이 신호를 처리하는 방법을 프로그램에 알려주는 코드를 작성할 수 있습니다 SIGSEGV
. SIGKILL
또는 를 캡처할 수 없습니다 SIGSTOP
. 단지 프로세스를 종료하고 싶을 때 a 또는 a를 사용하는 것이 좋습니다 SIGKILL
. 일반적으로 을 사용하면 부정적인 결과가 발생하지 않지만 종료하려는 프로세스가 예상하지 못한 방식으로 를 처리할 수 있습니다.SIGSTOP
SIGSEGV
SIGSEGV
답변2
SIGSEGV는 수신 프로그램에 의해 포착될 수 있으며, 그러면 프로그램이 원하는 것은 무엇이든 수행할 수 있습니다.
SIGKILL 및 SIGSTOP은 프로그램이 포착하거나 무시할 수 없는 유일한 신호입니다.