Linux: chiudi un programma con la riga di comando (non ucciderlo)


21

Alcune applicazioni consentono solo un'istanza in esecuzione (come eclipse, se si desidera utilizzare lo stesso spazio di lavoro). Quindi, se accedo da un'altra posizione, devo uccidere / chiudere l'applicazione che era aperta quando in precedenza ho effettuato l'accesso da un'altra posizione.

Uso sempre il comando kill per terminare il processo in esecuzione. Tuttavia, se si annulla un processo, potrebbe non salvare alcuni stati utili per un utilizzo futuro. Tuttavia, se lo "chiudi" correttamente facendo clic sul pulsante Chiudi, ad esempio, salverà correttamente gli stati.

C'è un modo per "chiudere" correttamente un'applicazione dalla riga di comando? So che questo può variare dalle applicazioni, quindi diventiamo un po 'più generici: come inviare un segnale a un'altra applicazione in esecuzione, e questo segnale funziona proprio come se si fa clic sul pulsante "chiudi" nella barra in alto?


2
Dovremmo supporre che l'accesso al desktop da remoto con VNC e quindi fare clic graficamente su Chiudi sia un sovraccarico eccessivo.
Brian Swift,

Risposte:


33

Per impostazione predefinita, il comando kill invierà SIGTERM(segnale di terminazione) al processo in esecuzione. Diversamente SIGKILL, che ucciderà forzatamente il processo senza alcuna possibilità di risposta, il SIGTERMsegnale può essere intercettato dal processo, consentendogli di terminare con grazia. Il fatto che si interrompa o meno in modo corretto dipende interamente dal processo stesso; può altrettanto facilmente uccidersi o ignorare del tutto il segnale.

Puoi assicurarti di inviare SIGTERMinvece di qualche altro segnale rendendolo esplicito sulla riga di comando in questo modo:

kill -s TERM <pid>

1
Sì, la premessa dell'OP è falsa. Il killcomando tenta un arresto regolare. Se in questo caso l'applicazione non si chiude in modo pulito, è rotta. (E la stragrande maggioranza delle domande non è rotta.)
David Schwartz,

2
Firefox sembra essere (rotto). Se corro kill -s TERM <firefox-pid>, non si spegnerà con grazia e quando lo riavvio mi chiederà se voglio ripristinare la sessione bloccata. : sospiro:
Wilson F

6

Si noti che quando si utilizza pkillanziché anziché kill, per specificare TERM la sintassi è:

pkill -TERM <process-name>

pkill è proprio come uccidere, ma puoi usare il nome del processo piuttosto che l'id. man pkill

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.