Как закрыть все экземпляры программы мгновенно?

11

Кошка моей подруги гуляла на моем ноутбуке, и я ее не заметил. Когда я повернулся, чтобы проверить, я вижу, что у меня есть 32 вкладки «Менеджер архивов». Как я могу закрыть их все мгновенно, как будто используя Alt+ F4на всех сразу.

sticsk
источник

Ответы:

14

Из командной строки:

killall file-roller

Вы можете сделать alt + f4, но вам нужно сделать это для каждого менеджера архива, который был открыт.

Rinzwind
источник
21
Хотя некоторые могут утверждать, что команда «killall» немного жесткая, ваше решение все еще гораздо более гуманное, чем kill catдействие, которое я собирался предложить.
Ник Вайнберг
Я не думаю, что есть более простой способ остановить их всех. Многие alt + f4 могли бы это сделать, но это был не вопрос ;-)
Rinzwind,
5
@NickWeinberg Я ценю это :)
кошка
5
Я прочитал этот вопрос и отвечаю неправильно. Я думал, что это было из-за того, что кошка закрыла все, и что ОП не знал, как кошка это сделала. Я был поражен, что кот смог написать killall file-roller: D
Виктор Меллгрен,
1
черт побери, @ViktorMellgren перестань заставлять меня разливать кофе на экране
Rinzwind,
3

Другой подход - использовать wmctrlутилиту (элемент управления Window Manager). Это может быть использовано, чтобы сообщить оконному менеджеру, что вы притворяетесь, что нажали кнопку закрытия. Это позволяет избежать потенциально сурового характера killall; например, некоторые программы с несохраненным документом сразу же завершают свою работу после их уничтожения (даже осторожно), а при нажатии кнопки закрытия появляется сообщение «Хотите сохранить?» незамедлительный.

Основная команда wmctrl -c WINDOWTITLE, так что в этом случае wmctrl -c "Archive Manager"(при условии, что у нее нет открытого файла: это меняет заголовок). К сожалению, он закрывается только по одному, поэтому нам нужно сделать больше, чтобы закрыть все из них.

wmctrl возвращает успех, если находит совпадение, поэтому мы можем зацикливаться, пока он не завершится неудачей:

while wmctrl -c "Archive Manager"; do sleep 0.1; done

При этом всегда выбирается первое найденное окно, поэтому нам нужно немного поспать, чтобы избежать непрерывной отправки потока команд закрытия в первое окно, которое уже занято закрытием - это может вызвать ошибку, которая останавливает цикл.

Это просто и обычно работает, но спать определенное количество времени и надеяться, что окно закрывается, прежде чем мы попробуем снова, - грязный и медленный способ избежать ошибки. Что мы действительно хотим сделать, так это немедленно отправить одно закрытое сообщение в каждое соответствующее окно.

Мы можем найти все открытые окна с wmctrl -l. В этом списке указан числовой идентификатор окна, который мы можем использовать для индивидуальной идентификации каждого окна, даже если все они имеют одинаковый заголовок. Затем нам нужно отфильтровать только соответствующие окна ( grepкоманда), извлечь только идентификатор окна ( cutкоманда) и вызвать wmctrl -i -cкаждое из них. -iНеобходимо , чтобы соответствовать идентификатор окна вместо заголовка окна.

for w in $(wmctrl -l | grep "Archive Manager" | cut -d" " -f1); do
    wmctrl -i -c $w
done

Немного сложнее просто вводить текст, когда кошка наступает на клавиатуру, но, надеюсь, это полезная техника для хранения в вашем наборе сценариев.

Харун
источник
2
Значит, вы ожидаете, что кошка напечатает что-то, что стоит сэкономить?
Rinzwind
0

Вы можете использовать сочетание клавиш Ctrl+, Qкоторое закроет все открытые окна диспетчера архивов.


Ctrl+ QЯрлык часто встречается на Ubuntu (и много других распределений, а). Он работает так же с большинством приложений, которые я использовал до сих пор. То есть он закроет все окна работающего приложения.

Дэн
источник
Отмените мой голос, так как я не могу подтвердить, что на Ctrl+Qсамом деле это делает. В то время как Quitменю закрывало все открытые окна диспетчера архивов, сочетание клавиш не делало то же самое (по крайней мере, в 14.04).
clearkimura
1
@clearkimura Я не могу подтвердить, связано ли это с тем, что я использую gnome, или с версией Ubuntu, но у меня работает на Ubuntu 17.04 (с gnome), который использует Archive Manager версии 3.22.3
Dan