Dopo che kill -9 process non scompare e la port è ancora legata

Abbiamo un'applicazione di server Java in esecuzione su Mac OS X.

Occasionalmente questa applicazione è diventata intriggers e abbiamo ricorso a ucciderlo con kill -9 . Tuttavia, il process non scompare; sembra ancora ps , con parentesi intorno al suo nome e un punto interrogativo nella colonna STAT:

 $ ps u -p 776 USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND camadmin 776 0.0 0.0 0 0 ?? ?E 5:12PM 0:00.00 (java) 

Inoltre, la port utilizzata dal server è ancora vincasting:

 $ netstat -na | grep 9902 tcp4 0 0 *.9902 *.* LISTEN 

anche se non è visibile a lsof :

 $ sudo lsof -P -i tcp | grep 9902 $ 

Con la port ancora vincasting, non è ansible riavviare l'applicazione server. A corto di riavviare la macchina, cosa può essere fatto per get la port a rilasciare e get questo process veramente ucciso?

  • Rimuovere un process zombie dalla tabella di process
  • Centos che uccidono la shell di padre non uccidono i processi di background?
  • Come uccidere un process "in output" su OS X (stato = E)
  • Possibile spedire il segnale di uccisione a tutti i processi con un dato ppid?
  • Come uccidere un process in Linux se kill -9 non ha alcun effetto
  • Quale effetto ha su un server quando si uccidono tutti i processi root?
  • Come posso tranquillamente uccidere una lunga query MSSQL in esecuzione?
  • Come uccidere il process apparentemente immortale?
  • 2 Solutions collect form web for “Dopo che kill -9 process non scompare e la port è ancora legata”

    Il tuo process sta aspettando qualcosa prima che possa uscire.

    Forse una chiamata di sistema. Provare ad accedere a un file che è stato smontato è un esempio comune di questo o una condivisione di networking non disponibile.

    C'è un process genitore o figlio che deve anche essere ucciso?

    Non sono un utente MacOS, ma su Linux ps wwauxf | less ps wwauxf | less è utile per sfogliare la gerarchia dei processi per cercare i processi genitori e figlio. strace -p [pid] potrebbe dirti qualcosa di utile per una chiamata di sistema corrente che non è ancora tornata.

    EDIT: il tuo process è stato avviato lanciando? Sembra che alcune persone abbiano problemi con questo (ad esempio, come uccidere un process "in output" in OS X (state = E) ) e come suggerito in precedenza, probabilmente dovrai uccidere il process padre, che in questo caso viene lanciato. Potrebbe essere che non è meglio di un riavvio.

    Probabilmente launchd mantiene una connessione con la tua app per riavviarlo se muore, ma non è tutto qui utile.

    Un kill -15 funziona meglio? cioè prima di entrare nello stato che descrivi, non come una via d'output.

    Lo stato E sembra significare che il process sta uscendo. Ma il tuo process è fondamentalmente uno zombie che non esce mai. Tutto in linea che ho trovato dimostra che c'è poco che puoi fare diverso dal riavvio, ad esempio Come uccidere un process di "output" in OS X (state = E) . Se non si desidera riavviare il server OSX a causa di altri servizi impattati, è ansible considerare (come soluzioni alternative):

    • Migrare solo questo servizio java a una macchina OSX separata che è ansible riavviare each volta che necessario con un impatto minimo

    • Se si dispone di abbastanza RAM su questo server, è ansible eseguire una VM e eseguire questo servizio dall'interno del VM. Se il process non risponde e non verrà ucciso, potresti semplicemente rimbalzare la VM e non influire sul sistema operativo host. Dal momento che sembra Java, non devi necessariamente fare il guest OS VM OSX. Forse provalo in un Ubuntu o in CentOS VM? Potresti scaricare uno di essi come un apparecchio (file OVA / VDI) e farlo funzionare in VirtualBox in less di 30 minuti. Non può nemless avere la questione zombie su un Linux VM. Vedi http://virtualboximages.com/Free.VirtualBox.VDI.Downloads

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.