qiuxiafei
qiuxiafei

Reputation: 5977

Why doesn't the java process exit after kill -15?

I kill the java programm by kill -15 $PID, and from the log I find the ShutdownHook is called and finished. But the process is still running.

So I dump the threads and find most of the are daemon thread, but the following:

[xiafei.qiuxf@dwbasis130009 tesla]$ grep prio stack  | grep -v daemon
"DestroyJavaVM" prio=10 tid=0x00002aaaab072000 nid=0x79d3 waiting for monitor entry [0x0000000041da4000]
"VM Thread" prio=10 tid=0x00002aaaab112000 nid=0x79e6 runnable 
"Gang worker#0 (Parallel GC Threads)" prio=10 tid=0x00002aaaab105800 nid=0x79d4 runnable 
"Gang worker#1 (Parallel GC Threads)" prio=10 tid=0x00002aaaab106800 nid=0x79d5 runnable 
"Gang worker#2 (Parallel GC Threads)" prio=10 tid=0x00002aaaab107000 nid=0x79d6 runnable 
"Gang worker#3 (Parallel GC Threads)" prio=10 tid=0x00002aaaab107800 nid=0x79d7 runnable 
"Gang worker#4 (Parallel GC Threads)" prio=10 tid=0x00002aaaab108000 nid=0x79d8 runnable 
"Gang worker#5 (Parallel GC Threads)" prio=10 tid=0x00002aaaab109000 nid=0x79d9 runnable 
"Gang worker#6 (Parallel GC Threads)" prio=10 tid=0x00002aaaab109800 nid=0x79da runnable 
"Gang worker#7 (Parallel GC Threads)" prio=10 tid=0x00002aaaab10a000 nid=0x79db runnable 
"Gang worker#8 (Parallel GC Threads)" prio=10 tid=0x00002aaaab10a800 nid=0x79dc runnable 
"Gang worker#9 (Parallel GC Threads)" prio=10 tid=0x00002aaaab10b800 nid=0x79dd runnable 
"Gang worker#10 (Parallel GC Threads)" prio=10 tid=0x00002aaaab10c000 nid=0x79de runnable 
"Gang worker#11 (Parallel GC Threads)" prio=10 tid=0x00002aaaab10c800 nid=0x79df runnable 
"Gang worker#12 (Parallel GC Threads)" prio=10 tid=0x00002aaaab10d000 nid=0x79e0 runnable 
"Concurrent Mark-Sweep GC Thread" prio=10 tid=0x00002aaaab111000 nid=0x79e5 runnable 
"Gang worker#0 (Parallel CMS Threads)" prio=10 tid=0x00002aaaab10e800 nid=0x79e1 runnable 
"Gang worker#1 (Parallel CMS Threads)" prio=10 tid=0x00002aaaab10f000 nid=0x79e2 runnable 
"Gang worker#2 (Parallel CMS Threads)" prio=10 tid=0x00002aaaab10f800 nid=0x79e3 runnable 
"Gang worker#3 (Parallel CMS Threads)" prio=10 tid=0x00002aaaab110800 nid=0x79e4 runnable 
"VM Periodic Task Thread" prio=10 tid=0x00002aaaab118000 nid=0x79f1 waiting on condition 

It seems that they are GC threads or jvm's threads, but none of them is mine(my threads are all finished.), so why the jvm process still keeps running?

Upvotes: 1

Views: 306

Answers (1)

Aaron Digulla
Aaron Digulla

Reputation: 328556

The dump says:

"DestroyJavaVM" prio=10 tid=0x00002aaaab072000 nid=0x79d3 
    waiting for monitor entry [0x0000000041da4000] <<------------

That means the process to terminate the application can't proceed because someone owns the monitor 0x0000000041da4000.

Look through the dump to find out which thread owns this monitor. That should give you an idea how to proceed.

Upvotes: 3

Related Questions