LINUX.ORG.RU
решено ФорумTalks

Убивать с комфортом. Может так можно, а я просто не знаю?

 


0

1

Мне часто приходится иметь дело с очень нестабильными программами, которые зависают на каждый чих. При этом программы обычно графические полноэкранные и при зависании не дают себя свернуть или переключиться на другое окно. Поэтому я переключаюсь в консоль, грепаю процесс по названию среди выхлопа ps и киляю по pid.

Вот бы после грепа иметь пронумерованый список и килять по номеру в этом списке.

Может так можно?

Deleted

htop – нажимаешь F9 и посылаешь любой сигнал процессу, в т.ч. SIGTERM и SIGKILL. Процессы можно фильтровать по F4. Удобнее этого сложно что-то придумать.

Im_not_a_robot ★★★★★ ()
Ответ на: комментарий от Yorween

Названия процессов могут быть довольно длинными, а иногда и неудобными для ввода. Ну там из 3-5 слов с пробелами.
Я так понимаю для killall мне придётся вводить название полностью. Это ещё больший геморрой получится в моём случае.

Deleted ()
Ответ на: комментарий от Im_not_a_robot

Htop умеет посылась сигналы? Прикольно, думаю это то, что надо.

Deleted ()
Ответ на: комментарий от Deleted

А что не так-то? Так даже ещё удобнее. Сразу в команду подставляются идентификаторы процессов your_program без необходимости вводить ещё какие-то числа.

saahriktu ★★★★★ ()
Ответ на: комментарий от saahriktu

Извини, я тебе неправильно понял вначале.
Но этот вариант мне всё равно не подходит из-за длинных названий процессов.

Deleted ()

Используй pkill и автодополнение из Zsh.

Meyer ★★★★★ ()
Ответ на: комментарий от Deleted

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

Yorween ()
Ответ на: комментарий от Yorween

киллалл может убивать не быстро - и пять минут и больше. было дело не мог убить несколько висящих влц плееров, когда килл 9 гасит все моментально.

deep-purple ★★★★★ ()
Ответ на: комментарий от deep-purple

Без указания сигнала killall использует SIGTERM - soft kill, как и kill/pkill, а kill -9 это SIGKILL - hard kill. Ты можешь использовать SIGKILL в killall.

Yorween ()

Короче, ставишь что-нибудь в env процессу, который ты запускаешь

TAG=piece_of_shit /opt/coolsoft/bin/cool_gui_electron_app.flatpack
Потом ищешь этот env в /proc/*/environ:
pid=$(grep -l "TAG=piece_of_shit" /proc/*/environ 2> /dev/null | cut -d/ -f3)
Потом грохаешь этот пид, пишешь скрипты, конфиги, кнопки, вешаешь это всё в какой-нибудь zenity и грохаешь уже по названию тега в формочке.

crutch_master ★★★★★ ()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от Deleted

Но этот вариант мне всё равно не подходит из-за длинных названий процессов.

pgrep you | xargs kill -9 убьет your_program.

KillTheCat ★★★★★ ()
Ответ на: комментарий от Black_Shadow

Киллерфича. Была. Но демоны из убунты выпилили.

bender ★★★★★ ()

killall умеет в completion по табу

kott ★★★★★ ()

Раньше, во втором гноме был специальный апплет для этого. Тыкаешь в него, тыкаешь в окно, профит. Но DE в линуксах больше нет.

K21 ()

Интересно, можно ли сделать как в Windows? Чтобы автоматически предлагалось завершить программу с не отвечающим графическим интерфейсом одной кнопкой.

Leupold_cat ★★★★ ()

htop уже советовали?

bl ★★★ ()

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

Я бы в таких условиях написал два скрипта: первый запускает сам себя и стороннюю программу в новой группе процессов (см. man 1 setsid) и записывает свой PID в какой-то файл с известным именем, а второй читает PID из этого файла и делает kill на всю группу (см. man 1 kill). Далее повешал бы второй скрипт на какое-нибудь хитрое сочетание клавиш, а проблемные программы запускал первым скриптом:

запускатор.sh проблемная_программа арг1 арг2 арг3 ...
Deleted ()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Leupold_cat

Проблема в том, как определить что она не отвечает. ЕМНИП во времена обычного win32 API, винда считала таковым прогу, которая не читает сообщения, так что прога с живым гуем, но висящим в параллельном треде «Обработчиком тяжелого говна», который повис, не будет предложена к убийству.

RiseOfDeath ★★★★ ()
Ответ на: комментарий от kott

Да, теперь припоминаю. Очень много лет не пользовался, забыл об этом.

Leupold_cat ★★★★ ()
Ответ на: комментарий от Deleted

повешал бы второй скрипт на какое-нибудь хитрое сочетание клавиш

полноэкранные приложения обычно перехватывают всю клавиатуру

Bad_ptr ★★★★ ()

Настрой хоткей на xkill, при зависании полноэкранной программы тупо прожимай его и кликай куда угодно. Употребляю 2 года, брат не умер.

Deleted ()
Ответ на: комментарий от Bad_ptr

полноэкранные приложения обычно перехватывают всю клавиатуру

Ни разу такой дряни не видел. Даже если так, SYSRQ-R не поможет?

Deleted ()
Ответ на: комментарий от Deleted

игры же
ТС о них наверное говорит

SYSRQ-R

сработает, как и переключение виртуального терминала, но это слишком радикально

Bad_ptr ★★★★ ()
Ответ на: комментарий от Bad_ptr

У меня хоткеи во всех игорах работают. Единственный кейс, когда убиваю графические приложения лапками - зависание хрома при перетаскивании картинок, вероятно, связанное с проблемами древнего GPU.

Вообще, если всё так плохо, пусть воткнёт USB-UART с кнопкой, замыкающей RX на TX, и сделает скрипт, киляющий активное окно при появлении эха. Аппаратные костыли - это весело.

Deleted ()

А не пробовали использовать для подобных целей systemd-run и systemctl kill ? Первая команда должна запускать ваш процесс и всех его потомков в отдельном cgroup'е (и создавать под это дело временный service), а вторая команда убивает все процессы внутри cgroup'ы указанного сервиса.

DawnCaster ★★ ()
Последнее исправление: DawnCaster (всего исправлений: 1)
Ответ на: комментарий от DawnCaster

Нет, я не очень знаю возможности systemd. Да и программы-то не обязательно виснут чтобы сразу городить такую обвязку.
Htop, оказывается, делает то что мне нужно и делает вполне удобно.

Deleted ()

Во второй половине 90-х кто-то прикрутил Doom к /proc и kill. Можно было бегать по коридорам и отстреливать процессы. Проблема была только с тем, чтобы найти и догнать нужный процесс, а так вообще - прикольно.

Stanson ★★★★★ ()
Ответ на: комментарий от aidaho

только у меня это на win+esc назначено в конфиге i3 это выглядит так

bindsym --release $mod+Escape exec xkill

amd_amd ★★★★ ()
kill -9 $(xprop -id `xdotool getwindowfocus` | grep '_NET_WM_PID' | grep -oE '[[:digit:]]*$')

повесил на alt+esc и нет проблем

SR_team ★★★★★ ()
Ответ на: комментарий от deep-purple

килл 9 гасит все моментально.

Потому что SIGKILL нельзя перехватить, а SIGTERM — можно. Вообще, рекомендуют сначала слать TERM, чтобы процесс имел возможность завершить свою работу корректно.

i-rinat ★★★★★ ()
Последнее исправление: i-rinat (всего исправлений: 1)

Бензопилу аозьми, будет тебе с комфортом

TooPar ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.