Вихід з Google Chrome з терміналу


28

Чи є спосіб змусити google-chromeвийти з терміналу, окрім використання killall google-chrome?
Я хотів би мати можливість закрити його зі сценарію, не вбиваючи його.


2
Що не так з убиванням?
Зоредаче

1
@Zoredache Це призводить до різної поведінки від виходу, і Chrome використовує кілька процесів, один з яких (пісочниця) - це встановлений корінь.
Жил "ТАК - перестань бути злим"

Відповіді:


12

Можливо, wmctrlможе бути якась допомога. Ви можете використовувати -cопцію, яка витончено закриває вікно:

wmctrl -c chrome

Рядок chromeузгоджується з заголовками вікна. Зверніть увагу, що вікно може не закритися, якщо якесь повідомлення спливе (наприклад, коли у вас відкрито кілька вкладок).


1
Цей параметр працює бездоганно, але він вимагає встановлення wmctrl.
slybloty

wmctrl не може закрити системний трей "Chrome Apps". pkill -o chromeробить, хоча.
Кен Шарп

26

Ця команда витончено закриває дерево хромового процесу у всіх менеджерах вікон:

pkill --oldest chrome

або якщо ви віддаєте перевагу:

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

Деталі:

  • витончено означає: уникайте бачення "Google Chrome не вимкнувся належним чином. Щоб повернути ... ”наступного разу, коли хром почнеться
  • хром браузера (наприклад, версія 39.0.2171.95) пастки та витончено обробляє SIGTERM
  • сигнал про єдиний процес, корінь хромового дерева процесу, отже --oldest
  • SIGTERMце те саме, що сигнал 15, отже --signal TERM, або просто залишити його поза, оскільки SIGTERMце сигнал за замовчуванням
  • wmctrl працює з Unity та деякими іншими, але це не працює з усіма менеджерами вікон
  • wmctrl -c закриває одне вікно за раз, тому для закриття всіх хромованих вікон вам знадобиться щось на кшталт while wmctrl -c 'Google Chrome'; do sleep 0.2; done

1
Я припускаю, що я використовую стару версію pkill, оскільки --oldestце не варіант: використання -oробіт.
Кен Шарп

-fаргумент pkill не працює для мене. У мене є деякі інші процеси, що працюють як корінь, у яких, як правило, слово chrome у їх командних рядках, тому мені просто відмовлено в дозволі. Без цього -fвін працює чудово, хоча.
Брайан Мінтон

Це все ще змушує мене бачити «не закрили corrently»
xtrinch

Як я можу зробити так, щоб це було виконано в Ubuntu 18.04 відразу після запуску перезавантаження чи відключення ?.
Хайме Хаблуцель

1

Це працює для мене:

killall --quiet --signal 15 -- chrome

Зауважте, що я використовую досить багатослівну команду для того, щоб читати її в коді, звичайно, ви також можете видавати:

killall -q -15 chrome

1

Увімкніть Mac OS X, використовуйте це замість цього

pkill -a -i "Google Chrome"

Для цього потрібно шукати процес Google Chrome і вбивати також усі його батьківські процеси.

З посібника з 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.

Відповідно з @ Кейтом-Кассіо 's відповіді , ви можете спробувати вбити сам старий процес замість. Зауважте, що це не спрацювало для мене.

pkill -o -i "Google Chrome"

0

спробуйте:

kill -3 <pid_of_chrome>

Це відправить сигнал "QUIT" в хром, який, залежно від вашого менеджера вікон, буде тим, що він зазвичай надсилається, коли його просять закрити.


2
Це діє так само, як killі killallтам, де Chrome сприймає це як збій, і просить відновити.
slybloty

1
спробуйте 15 замість 3, потім
Блекл Морі

6
Насправді, SIGQUITяк правило, не надсилається програмам, коли їх просять закрити (я не знаю жодної WM, яка це робить). WM_DELETE_WINDOWє стандартом.
Кріс Даун

2
@ blacklemon67 kill -15 <pid_of_chrome>робив те, що я шукав. Але, google-chromeє кілька прищиків, і було потрібно кілька спроб, щоб насправді отримати правильний.
slybloty
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.