Come eseguire soft kill sulle applicazioni gui tramite terminale?


22

Esiste un modo per chiudere un'applicazione GUI in modo intuitivo "per favore, abbandonati ora ", senza accesso grafico alla finestra delle applicazioni?

Ad esempio, se il display di Gnome / X si arresta in nero, mi piacerebbe passare a tty2 e chiudere le applicazioni come Firefox in un modo che consenta loro di salvare la loro configurazione, ecc. Al meglio senza ulteriori domande da parte dell'utente.

Risposte:


19

Di solito, è possibile utilizzare SIGHUP per chiudere "amichevole" un'applicazione (con o senza interfaccia grafica).

kill -HUP <application_pid>

MODIFICATO : aggiunte alcune altre informazioni

Il modo in cui viene gestito SIGHUP dipende dall'applicazione, quindi, come notato da Dave , può accadere che questo segnale sia mascherato o gestito. Tuttavia, quasi tutte le applicazioni interattive escono con grazia con un SIGHUP.

D'altra parte, devo ammettere che di solito seguo questo schema:

kill -HUP <application_pid>
# check if application is still running
kill -INT <application_pid>
# check if application is still running
kill -KILL <application_pid>

Ovviamente l'ultimo comando non è così "amichevole".


3
Se non conosci il PID dell'applicazione, puoi utilizzare invece pkillper specificare il nome dell'eseguibile. Ad esempio:pkill -HUP firefox-bin
Caleb,

@Dave troppo: interessante, ho trovato questo correlato che suggerisce un ordine simile ma ripristinato: TERM-> INT-> HUP (attenzione alla vecchiaia). Forse terrò presente HUP-> INT-> TERM, dato che KILL non sembra essere amichevole con me. Grazie a tutti.
jfk,

@Caleb, fai attenzione lì dove ci sono più processi con lo stesso nome: pkillli uccideranno tutti. Ad esempio, eseguire questo un paio di volte per fare alcuni processi in background: sed "s/Woo/woo/" < /dev/urandom >> /dev/null &. Allora fallo pkill -HUP sed. Ucciderai tutte le istanze di sed che hai iniziato e qualsiasi altra istanza che fa un lavoro utile.
ahcox,

@Caleb inoltre, pkillucciderà anche alcune app che non ti aspetti: ad esempio se hai in chromiumesecuzione e vuoi uccidere un programma chiamato rom, abbatteranno pkillfelicemente chromium. Uso migliore killall, che corrisponderà solo al nome esatto (non su Solaris, tuttavia, dove uccide letteralmente tutti i processi ).
Ruslan,

@Ruslan Oppure utilizza pkill -xper ottenere una corrispondenza esatta anziché parziale. Personalmente approfitto della corrispondenza parziale per salvare la digitazione, ma devi sapere cosa fa lo strumento. Sì, per impostazione predefinita corrisponde a stringhe parziali. Un'altra opzione utile è quella -fdi abbinare l'intera riga di comando anziché solo $0.
Caleb,

5

Puoi provare:

kill -TERM <pid>

o

kill -TERM `pidof <application_name>`

Almeno su alcuni sistemi, quando il sistema sta attraversando l'arresto, a tutti i processi viene inviato il segnale TERM (15) prima di ricevere il segnale KILL (9). L'HUP spesso fa sì che l'applicazione ricarichi le sue configurazioni, ma può essere diversa a seconda dei processi.


2

Non esiste un modo generale per dire a un'applicazione di uscire e salvarne la configurazione. Ci possono essere modi per notificare le applicazioni utilizzando un particolare framework, ad esdcop kfoo MainApplication-Interface quit per alcune applicazioni di KDE 3. Ricorda che l'applicazione potrebbe mostrare una finestra di dialogo che ti chiede conferma.

Se il display X diventa inutilizzabile, uccidi il server X. Premi Ctrl+ Alt+ BackSpace; se non funziona, uccidi il processo del server X con sudo pkill -x Xorg. Quando il server X muore, tutte le applicazioni X vengono avvisate e proveranno ad uscire con garbo (non c'è garanzia che salveranno tutto, ma è la soluzione migliore).


Non sapevo se le app verranno notificate o semplicemente uccise; e poiché la combinazione di tasti non è abilitata di default su Fedora ..... Ora so come ucciderla dalla riga di comando!
jfk,

1

Simile alla risposta di @ andcoz, se non conosci il PID dell'applicazione (suppongo che tu non lo sappia a memoria), prova questo:

kill -HUP `pidof [application_name]`

2
Fai un passo avanti e prova pkill -HUP [application_name]:)
Caleb,

Ho appena imparato pkill e pgrep: D
jfk,

1

Altri due comandi che potresti voler prendere in considerazione sono wmctrl -ce xdotool windowkill. Non sono sicuro che windowkillsia esattamente quello che stai cercando, altrimenti potresti essere interessato alla windowdeletepatch.

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.