Wyjdź z Google Chrome z terminala

28

Czy istnieje sposób, aby spowodować google-chromewyjście z terminala oprócz używania killall google-chrome?
Chciałbym móc go zamknąć ze skryptu bez jego zabijania.

slybloty
źródło
2
Co jest złego w zabijaniu?
Zoredache
1
@Zoredache To, że powoduje inne zachowanie niż wychodzenie i że Chrome korzysta z wielu procesów, z których jeden (piaskownica) to setuid root.
Gilles „SO- przestań być zły”

Odpowiedzi:

12

Być może wmctrlmoże pomóc. Możesz użyć -copcji, która z wdziękiem zamyka okno:

wmctrl -c chrome

Ciąg chromejest dopasowywany do tytułów okien. Pamiętaj, że okno może się nie zamknąć, jeśli pojawi się wyskakująca wiadomość (np. Gdy masz otwartych wiele kart).

Baldrick
źródło
1
Ta opcja działa bezbłędnie, ale wymagała instalacji wmctrl.
slybloty
wmctrl nie może zamknąć zasobnika systemowego „Aplikacje Chrome”. pkill -o chromerobi to.
Ken Sharp
26

To polecenie z wdziękiem wychodzi z drzewa procesów chrome we wszystkich menedżerach okien:

pkill --oldest chrome

lub jeśli wolisz:

/usr/bin/pkill --oldest --signal TERM -f chrome    

Detale:

  • z wdziękiem oznacza: unikaj wyświetlania „Google Chrome nie zamknął się poprawnie. To repoen ... ”przy następnym uruchomieniu Chrome
  • przeglądarka chrome (np. wersja 39.0.2171.95) wyłapuje i z wdziękiem obsługuje SIGTERM
  • sygnalizuje pojedynczy proces, stąd korzeń drzewa procesów chrome --oldest
  • SIGTERMjest taki sam jak sygnał 15, a więc --signal TERMpo prostu pomiń go, ponieważ SIGTERMjest to sygnał domyślny
  • wmctrl współpracuje z Unity i niektórymi innymi, ale nie działa ze wszystkimi menedżerami okien
  • wmctrl -c zamyka jedno okno na raz, więc aby zamknąć wszystkie chromowane okna, potrzebujesz czegoś takiego while wmctrl -c 'Google Chrome'; do sleep 0.2; done
Keith Cascio
źródło
1
Zakładam, że używam starej wersji pkill, ponieważ --oldestnie ma takiej opcji: używanie -odziała.
Ken Sharp,
-fargument pkill nie pracuje dla mnie. Mam inne procesy działające jako root, które akurat mają słowo chrome w swoich wierszach poleceń, więc po prostu odmawia mi się pozwolenia. Bez tego -fjednak działa idealnie.
Brian Minton
To wciąż sprawia, że ​​widzę, że „nie zamknął się corrent”
xtrinch
W Ubuntu 18.04, jak mogę to zrobić natychmiast po uruchomieniu ponownego uruchomienia lub zamknięcia?
Jaime Hablutzel
1

To działa dla mnie:

killall --quiet --signal 15 -- chrome

Zauważ, że używam raczej pełnego polecenia, aby było czytelne w kodzie, oczywiście możesz również wydać:

killall -q -15 chrome
Fleshgrinder
źródło
1

Włącz Mac OS X, zamiast tego użyj tego

pkill -a -i "Google Chrome"

Poszukuje procesu Google Chrome i zabija również wszystkie procesy nadrzędne.

Z podręcznika 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.

Zgodnie @ Keith-Cascio 's odpowiedzi , można spróbować zabić najstarszy proces. Pamiętaj, że to nie działało dla mnie.

pkill -o -i "Google Chrome"
Hanxue
źródło
0

próbować:

kill -3 <pid_of_chrome>

Spowoduje to wysłanie sygnału „ZAKOŃCZ” do chrome, który, w zależności od menedżera okien, będzie zwykle wysyłany, gdy zostaniesz poproszony o zamknięcie.

Blackle Mori
źródło
2
Działa to tak samo killlub w killallprzypadku, gdy Chrome widzi to jako awarię i prosi o przywrócenie.
slybloty,
1
spróbuj 15 zamiast 3, a następnie
Blackle Mori
6
W rzeczywistości SIGQUITnie jest zwykle wysyłany do aplikacji, gdy jest proszony o zamknięcie (nie znam żadnych WM, które to robią). WM_DELETE_WINDOWjest standardem.
Chris Down,
2
@ blacklemon67 kill -15 <pid_of_chrome>zrobił to, czego szukałem. Ale google-chromema wiele pid i kilka próbowało znaleźć właściwy.
slybloty