Come sospendere e riprendere i processi


143

Nel terminale bash posso premere Control+ Zper sospendere qualsiasi processo in esecuzione ... quindi posso digitare fgper riprendere il processo.

È possibile sospendere un processo se ho solo il PID? E se sì, quale comando dovrei usare?

Sto cercando qualcosa come:

suspend-process $PID_OF_PROCESS

e poi per riprenderlo con

resume-process $PID_OF_PROCESS

Risposte:


172

È possibile utilizzare killper interrompere il processo.

Per un arresto "educato" del processo (preferirlo per un uso normale), invia SIGTSTP:

kill -TSTP [pid]

Per un arresto "difficile", invia SIGSTOP:

kill -STOP [pid]

Si noti che se il processo che si sta tentando di arrestare tramite PID si trova nella tabella dei lavori della shell, potrebbe rimanere visibile lì, ma terminato, fino a quando il processo non si fgripeterà.

Per riprendere l'esecuzione del processo, ha inviato SIGCONT:

kill -CONT [pid]

25
A meno che non ci siano altri motivi, preferirei SIGTSTP rispetto a SIGSTOP, poiché alcune applicazioni gestiscono SIGTSTP in modo speciale. Ad esempio, se scp mostra una barra di avanzamento, SIGTSTP farà sì che ripulisca la modalità terminale prima di sospendere, ma se si invia SIGSTOP, non avrà la possibilità di farlo.
effimero

3
@ephemient Ho provato SIGTSTP, ho visto cosa stavi dicendo a proposito di ripulire il terminale. Grazie per la spiegazione di SIGTSTP, sempre bravo a imparare cose nuove :)
Steve Burdine

2
Utile anche notare che è possibile fare riferimento al valore [pid] utilizzando il simbolo% e quindi il numero del lavoro (uno che è possibile trovare eseguendo jobs). Quindi kill -TSTP %1
andresti


43

Dovresti usare il killcomando per quello.

Per essere più prolisso, devi specificare il segnale giusto , ad es

$ kill -TSTP $PID_OF_PROCESS

per la sospensione del processo e

$ kill -CONT $PID_OF_PROCESS

per averlo ripreso. Documentato qui .


Mi chiedo quale incidente della storia abbia portato a questa risposta ottenere meno voti? Le risposte sono quasi le stesse e questa è arrivata prima ....
Wildcard

7
@Wildcard, quando ho creato la risposta ero un po 'di fretta, quindi, in sostanza, conteneva solo la prima parte kill -TSTP(ovvero come sospendere). 1/2 anno dopo, ovvero il 2011, ho rivisitato la mia risposta e ho notato la sua incompletezza. Così, l'ho modificato e ho aggiunto anche la kill -CONTparte. Ciò dovrebbe spiegare la differenza di voti rispetto alla risposta di Steve.
maxschlepzig
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.