C'è un modo per far google-chrome
uscire, dal terminale, oltre all'utilizzo killall google-chrome
?
Vorrei poterlo chiudere da uno script senza ucciderlo.
C'è un modo per far google-chrome
uscire, dal terminale, oltre all'utilizzo killall google-chrome
?
Vorrei poterlo chiudere da uno script senza ucciderlo.
Risposte:
Forse wmctrl
potrebbe essere di qualche aiuto. È possibile utilizzare l' -c
opzione che chiude con grazia una finestra:
wmctrl -c chrome
La stringa chrome
viene confrontata con i titoli delle finestre. Si noti che la finestra potrebbe non chiudersi se viene visualizzato un messaggio (ad es. Quando sono aperte più schede).
wmctrl
.
pkill -o chrome
lo fa però.
Questo comando esce con garbo dall'albero dei processi di Chrome, in tutti i gestori di finestre:
pkill --oldest chrome
o se preferisci:
/usr/bin/pkill --oldest --signal TERM -f chrome
Dettagli:
SIGTERM
--oldest
SIGTERM
è lo stesso del segnale 15
, quindi --signal TERM
, o semplicemente lasciarlo fuori dal momento che SIGTERM
è il segnale predefinitowmctrl
funziona con Unity e alcuni altri ma non funziona con tutti i gestori di finestrewmctrl -c
chiude una finestra alla volta, quindi per chiudere tutte le finestre cromate avresti bisogno di qualcosa di simile while wmctrl -c 'Google Chrome'; do sleep 0.2; done
--oldest
non è un'opzione: usare -o
funziona.
-f
argomento di pkill non funziona per me. Ho alcuni altri processi in esecuzione come root che hanno la parola chrome nelle loro linee di comando, quindi mi viene negata l'autorizzazione. Senza il -f
, funziona perfettamente però.
Questo funziona per me:
killall --quiet --signal 15 -- chrome
Nota che sto usando un comando piuttosto dettagliato per mantenerlo leggibile nel codice, ovviamente potresti anche emettere:
killall -q -15 chrome
Su Mac OS X
, usa questo invece
pkill -a -i "Google Chrome"
Quello che fa è cercare un processo di Google Chrome e anche uccidere tutti i suoi processi principali.
Dal manuale di pkill
-a Include process ancestors in the match list. By default, the
current pgrep or pkill process and all of its ancestors are
excluded (unless -v is used).
-i Ignore case distinctions in both the process table and the
supplied pattern.
Secondo la risposta di @ keith-cascio , puoi invece provare a terminare il processo più vecchio. Nota che questo non ha funzionato per me.
pkill -o -i "Google Chrome"
provare:
kill -3 <pid_of_chrome>
Questo invierà un segnale "QUIT" a Chrome, che, a seconda del gestore della finestra, sarà quello che viene normalmente inviato quando viene chiesto di chiudere.
kill
o killall
dove Chrome lo vede come un arresto anomalo e chiede di ripristinarlo.
SIGQUIT
solito non viene inviato alle applicazioni quando viene chiesto di chiudere (non conosco alcun WM che lo faccia). WM_DELETE_WINDOW
è lo standard.
kill -15 <pid_of_chrome>
fatto quello che stavo cercando. Ma google-chrome
ha molti pid e ci sono voluti alcuni per cercare di ottenere quello giusto.