Есть ли способ заставить google-chromeвыйти из терминала, кроме использования killall google-chrome?
Я хотел бы иметь возможность закрыть его из сценария, не убивая его.
Есть ли способ заставить google-chromeвыйти из терминала, кроме использования killall google-chrome?
Я хотел бы иметь возможность закрыть его из сценария, не убивая его.
Ответы:
Возможно, wmctrlможет быть какая-то помощь. Вы можете использовать -cопцию, которая изящно закрывает окно:
wmctrl -c chrome
Строка chromeсопоставляется с заголовками окон. Обратите внимание, что окно может не закрыться, если всплывет какое-то сообщение (например, если у вас открыто несколько вкладок).
wmctrl.
pkill -o chromeделает хотя.
Эта команда корректно выходит из дерева процессов Chrome во всех оконных менеджерах:
pkill --oldest chrome
или если вы предпочитаете:
/usr/bin/pkill --oldest --signal TERM -f chrome
Детали:
SIGTERM--oldestSIGTERMто же самое 15, что --signal TERMи SIGTERMсигналwmctrl работает с Unity и некоторыми другими, но работает не со всеми оконными менеджерамиwmctrl -c закрывает одно окно за раз, поэтому чтобы закрыть все хромированные окна, вам нужно что-то вроде while wmctrl -c 'Google Chrome'; do sleep 0.2; done--oldestэто не вариант: использование -oработает.
-fаргумент pkill не работает для меня. У меня есть некоторые другие процессы, работающие от имени пользователя root, в которых есть слово chrome в командной строке, поэтому мне просто отказано в разрешении. Без -f, это работает отлично, хотя.
Это работает для меня:
killall --quiet --signal 15 -- chrome
Обратите внимание, что я использую довольно многословную команду, чтобы сделать ее читабельной в коде, конечно, вы также можете выполнить:
killall -q -15 chrome
На 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"
пытаться:
kill -3 <pid_of_chrome>
Это отправит сигнал «ВЫЙТИ» в chrome, который, в зависимости от вашего оконного менеджера, будет тем, что обычно отправляется при запросе на закрытие.
killи killallкогда Chrome видит это как сбой, и просит восстановить.
SIGQUITобычно не отправляется приложениям, когда их просят закрыть (я не знаю ни одного WM, который делает это). WM_DELETE_WINDOWэто стандарт.
kill -15 <pid_of_chrome>сделал то, что я искал. Но, google-chromeесть несколько пидов, и потребовалось несколько попыток, чтобы действительно получить правильный.