Come chiudere l'applicazione dal terminale allo stesso modo di uscire correttamente


9

Di solito quando eseguo un'applicazione in ambiente grafico, quando voglio chiuderla faccio clic Xnell'angolo in alto a sinistra della finestra o vado a File > Close.

A volte vorrei chiudere questi programmi in remoto su ssh dal terminale usando la riga di comando, ora uso il killcomando ma mi chiedo che faccia lo stesso di uscire correttamente dall'applicazione da se stesso.

Dal man killsegnale predefinito sembra essere 15) SIGTERM, questo segnale dirà all'applicazione che sto cercando di chiudere per pulire, chiudere file aperti, salvare roba?

C'è un modo migliore se voglio farlo dal terminale?


2
Grazie per avermelo chiesto! Ho imparato qualcosa che sicuramente tornerà utile ad un certo punto.
Oliphaunt: ripristina Monica il

Risposte:


9

Il modo tipico di chiudere l'applicazione con garbo è usare kill -TERM 1234, dove si 1234trova il PID della finestra. Il problema, tuttavia, è che le applicazioni grafiche sono progettate per ascoltare un segnale specifico dal server X stesso, non per ascoltare il TERMsegnale.

Ciò significa che avresti bisogno di un qualche tipo di agente tra te e il server X per comunicare che desideri inviare il segnale appropriato. Naturalmente puoi scrivere un programma C, tuttavia esiste un wmctrlprogramma abbastanza vasto (non sorprendentemente scritto in C) che fa esattamente questo.

L'uso di wmctrlè semplice:

wmctrl -c :SELECT: # close window that will be selected with pointer
wmctrl -c :ACTIVE: # close currently active window
wmctrl -ic <numeric id> # close window with specific id in hex

Non è installato di default, quindi procuratelo sudo apt-get install wmctrl

Ci sono molti usi per cui wmctrlva ben oltre la semplice chiusura di Windows, quindi per favore vedi più delle mie risposte e Jacob Vlijm per esempi di script in cui è stato usato


2
Basta aggiungere qui che wmctrl -lelencherà tutte le finestre e fornirà l'id numerico in esadecimale nella prima colonna. =)
Terrance

Grazie, funziona alla grande con la maggior parte delle applicazioni, ma con Diluvio c'è un'opzione Minimize to tray on closee wmctrl -cchiuderà solo una finestra, non l'applicazione stessa, rimarrà in esecuzione minimizzata sul vassoio.
Mike,

3

Penso che valga la pena aggiungere che wmctrl -xlprodurrà risultati come questo:

0x03000001 -1 google-chrome.google-chrome  dcentore-pc Rybak - Google Play Music - Google Chrome
0x04600006  0 speedcrunch.Speedcrunch  dcentore-pc SpeedCrunch

Dove xrichiede la classe della finestra di essere nell'output. Questo è spesso il modo più semplice per chiudere lo stesso programma ogni volta. Quindi, possiamo semplicemente fornire la classe window quando la si chiude:

wmctrl -xc speedcrunch.Speedcrunch

Questo esempio chiuderà lo speedcrunch.

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.