Come uccidere i processi che non rispondono all'uccisione di -9


9

Sto vedendo i processi sul mio SGI Altix 450 che eseguono SLES 10.1 sembra fermarsi (cioè non fornire ulteriori output nei loro registri per ore). A questo punto voglio terminare il processo offensivo per poterlo riavviare. Top mostra che il processo è nello stato (R). Anche se quando provo ad ucciderlo non succede nulla. Anche quando uso kill -9 rimane ancora. In questo caso cosa posso fare se non riavviare la macchina?


2
Sono sicuramente lo stesso ID processo? Non sta uccidendo il processo e alcuni demoni stanno rilanciando un processo con lo stesso nome?
CK.

Risposte:


9

È possibile che il processo venga interrotto ma in attesa che il genitore raccolga il valore restituito. In tal caso, dopo essere stato ucciso, si troverebbe nello stato "Z" e non in "R". In quel caso dovresti trovare il ppidprocesso usando il pscomando e anche uccidere il processo genitore (se sei veramente sicuro che non causerà problemi).

L'altro caso potrebbe essere che per qualche motivo il processo si riavvii dopo essere stato ucciso come tty. In tal caso, l'id del processo dovrebbe cambiare ogni volta che uccidi -9. Verifica se l'ID processo cambia ogni volta che tenti di ucciderlo.


Credo che sto cercando di uccidere il processo genitore. È il processo padre che si trova nello stato (R). pstree lo conferma. I processi figlio sono tutti negli stati (Z) zombi. Il ppid rimane statico, quindi non credo che si stia semplicemente riavviando.
Jared Brown,

Se si annulla il processo genitore (e il suo processo genitore e così via), allora init diventerà genitore dei processi figlio che si trovano nello stato 'Z' e raccoglierà il loro valore di ritorno. Quindi il modo migliore per rimuovere i bambini 'Z' il cui genitore non sta assumendo il loro valore di ritorno, è quello di uccidere anche il genitore in modo che init diventi genitore dei processi figlio morto.
Saurabh Barjatiya,

Questo è il problema che sto riscontrando. L'invio di un segnale -9 tramite kill al processo genitore non lo termina.
Jared Brown,

1
L'invio di SIGHUP al genitore a volte è sufficiente. Non devi sempre uccidere il genitore.
Thomas,

2
Mi dispiace, SIGCHLD. (troppo presto la mattina)
Thomas

2

Il processo è in attesa di alcune risorse di sistema, forse NFS? ciò non gli consente di "lasciarsi andare". Mi piacerebbe sentire alcune soluzioni al di là della mia ...

riavvia il box o lascia che il processo si svolga.

Mi chiedo se potresti essere in grado di "FERMARE" il processo tramite kill -STOP {PID} per impedirne il consumo di più CPU.

Il riavvio dovrebbe essere possibile anche con un altro processo arrestato in attesa, ma potrebbe richiedere una porta elenco o un segmento di memoria condivisa che è ancora in uso dall'altro processo.


1
Un processo in attesa su NFS o una funzione I / O completa non sarebbe in uno stato (D)? Questi processi sono in uno stato (R).
Jared Brown,

Questo è esattamente ciò che mi sta accadendo a volte quando lseseguo il comando su un mount s3fs. Il lsprocesso non si interromperà nemmeno kill -9fino a quando non forzerò lo smontaggio conumount -l
Marco Marsala,

0

Hai già controllato dmesg? L'ho visto dopo un panico nel kernel; l'unico modo per recuperare è riavviare (preferibilmente presto) - e quindi ottenere un kernel con patch.

I normali processi non ricaricabili si troveranno nello stato D, non in R.


Si può fare qualcosa riguardo ai processi difficili dello stato D diversi dal riavvio? ppid = 1
Prof. Moriarty,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.