Есть ли способ заставить 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
--oldest
SIGTERM
то же самое 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
есть несколько пидов, и потребовалось несколько попыток, чтобы действительно получить правильный.