kill -3이 실제로 Java 프로세스를 종료합니까? 아니면 스레드 덤프를 생성하시겠습니까?

kill -3이 실제로 Java 프로세스를 종료합니까? 아니면 스레드 덤프를 생성하시겠습니까?

센트OS 5.9

내가 달리면 kill -3 <java process pid>실제로 무슨 일이 일어나나요? 에 따라이 빨간 모자 기사, Java Thread Dump가 생성되었지만 프로세스가 종료된 것으로 알고 있습니다. 내 테스트를 기반으로 하지 않는 것 같습니다.

[root@foobox ~]# kill -3 14559

[root@foobox ~]# service foo status
foo (pid 14559) is running...

즉, 서비스에 영향을 주지 않고 이 방식을 통해 스레드 덤프를 수집할 수 있습니까?

답변1

kill -3JVM 프로세스가 종료되지 않기를 바랍니다 .

스레드 덤프는 스택 추적 수집 중에 서비스에 아주 약간의 영향을 미칩니다. 특히 수천 개의 스레드가 실행 중인 경우에는 더욱 그렇습니다.

플래그가 사용되는 경우 -XrsJVM은 더 이상 SIGQUIT신호를 구체적으로 처리하지 않으며 일부 기본 코드에 대체 핸들러가 없으면 해당 신호가 프로세스를 종료할 가능성이 높습니다.

답변2

https://superuser.com/questions/352147/what-does-kill-3-mean더 많은 정보를 제공할 수 있습니다.

수신 시 정확히 어떻게 반응할지 결정하는 것은 프로세스에 달려 있습니다.SIGQUIT

해당 신호는 프로세스에 의해 포착, 무시 또는 차단될 수 있으므로 kill. 더 자세히 살펴보고 싶다면 PID를 kill로 strace보내면서 PID를 추적하는 스택을 제안합니다.SIGQUIT

관련 정보