Чи є спосіб змусити google-chrome
вийти з терміналу, окрім використання killall google-chrome
?
Я хотів би мати можливість закрити його зі сценарію, не вбиваючи його.
Чи є спосіб змусити google-chrome
вийти з терміналу, окрім використання killall google-chrome
?
Я хотів би мати можливість закрити його зі сценарію, не вбиваючи його.
Відповіді:
Можливо, wmctrl
може бути якась допомога. Ви можете використовувати -c
опцію, яка витончено закриває вікно:
wmctrl -c chrome
Рядок chrome
узгоджується з заголовками вікна. Зверніть увагу, що вікно може не закритися, якщо якесь повідомлення спливе (наприклад, коли у вас відкрито кілька вкладок).
wmctrl
.
pkill -o 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 не працює для мене. У мене є деякі інші процеси, що працюють як корінь, у яких, як правило, слово 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>
Це відправить сигнал "QUIT" в хром, який, залежно від вашого менеджера вікон, буде тим, що він зазвичай надсилається, коли його просять закрити.
kill
і killall
там, де Chrome сприймає це як збій, і просить відновити.
SIGQUIT
як правило, не надсилається програмам, коли їх просять закрити (я не знаю жодної WM, яка це робить). WM_DELETE_WINDOW
є стандартом.
kill -15 <pid_of_chrome>
робив те, що я шукав. Але, google-chrome
є кілька прищиків, і було потрібно кілька спроб, щоб насправді отримати правильний.