우리는 정기적 /etc/init.d/jboss stop
으로 우리 컴퓨터에서 jboss를 중지합니다. 그러나 때로는 프로세스가 중단되지 않고 아래에 붙여진 내용이 표시되는 경우도 있습니다. 이런 일이 발생하면 우리는 kill -9
.
waiting for processes to stop/usr/local/jboss/bin/run.sh
waiting for processes to stop/usr/local/jboss/bin/run.sh
waiting for processes to stop/usr/local/jboss/bin/run.sh
/usr/local/jboss/bin/run.sh
Timeout: Shutdown command was sent, but process is still running with PID 7252
[root@mercury02 ~]#
추신: /etc/init.d/jboss 파일을 열었고 예상 kill -15
대로 stop
.
답변1
SIGTERM이 작동하지 않는 것이 전부가 아니라 애플리케이션이 원하는 방식으로 반응하지 않는다는 것입니다. 일반적으로 SIGTERM을 캡처하는 목적은 종료하기 전에 데이터를 디스크에 동기화하는 등 일부 정렬 작업을 수행하는 것입니다.
그러나 프로세스가 실제로 종료되어야 한다는 요구사항은 없으므로 응답 중에 문제가 발생하면 종료되지 않을 수도 있습니다.
kill -9
반면에 SIGKILL()은 포착될 수 없으며 몇 가지 매우 특이한 이유를 제외하고는 프로세스를 강제로 중지해야 합니다.논스톱(자발적으로 발생할 수 없는 이유) 문제는 이것이 프로세스가 종료되기 전에 수행해야 하는 작은 작업을 반응하고 수행할 수 없다는 것을 의미한다는 것입니다. 이는 디스크의 데이터가 일관되지 않은 상태로 남아 있음을 의미할 수 있습니다.
따라서 프로세스를 종료하는 일반적이고 선호되는 방법은 SIGTERM입니다. SIGKILL이 실패할 때만 사용해야 합니다. 이 경우 제대로 작동하는 애플리케이션에서는 SIGKILL이 필요하지 않기 때문에 이것이 왜 필요한지 궁금해야 합니다. 다시 말해서...
이는 애플리케이션 코드의 버그일 수 있습니다.
예.