Графическая отправка сигналов SIGSTOP или SIGCONT (аналогично xkill)
Вопрос
Знаете ли вы какой-либо инструмент / скрипт для отправки SIGSTOP
(чтобы приостановить процесс) или SIGCONT
(чтобы возобновить его) для процесса, нажав на графическое окно, созданное процессом?
Некоторый контекст
Уже есть инструмент под названием xkill
который убивает программы нажатием на окно, но у него нет опций для отправки определенного сигнала. Это жаль, потому что несколько связанных инструментов командной строки, таких как kill
есть эта опция.
Обычно я делаю это через командную строку, вручную получая соответствующие имена процессов и используя такие инструменты, как kill
, pkill
или же killall
но было бы неплохо сделать это графически, аналогично нажатию на окно с xkill
инструмент.
Приложения
Я нашел бы такой инструмент очень полезным для графической приостановки некоторых тяжелых процессов, когда процессор слишком "нагружен", не прерывая их и не теряя данные, которые не могут быть сохранены (например, для частичных результатов длинных вычислений).
1 ответ
Ты можешь использовать xdotool
чтобы позволить пользователю щелкнуть окно и получить его идентификатор процесса. Тогда вы можете использовать kill
отправлять, например, сигналы STOP или CONT этому процессу и таким образом замораживать / оттаивать.
Во-первых, вам, вероятно, придется установить xdotool
предустановлен:
sudo apt install xdotool
Тогда команда для получения PID процесса, владеющего конкретным окном, которое можно выбрать щелчком мыши, будет выглядеть так:
xdotool selectwindow getwindowpid
Это печатает числовой идентификатор процесса. Вы можете использовать поставку в качестве аргумента kill -STOP
или же kill -CONT
приостановить и продолжить указанный процесс. Это можно упростить, сохранив PID в переменной, как в этом небольшом скрипте ниже, который приостанавливает процесс щелкающего окна на 5 секунд:
#!/bin/bash
wpid="$(xdotool selectwindow getwindowpid)"
kill -STOP "$wpid"
sleep 5
kill -CONT "$wpid"
Теперь вы можете сохранить этот скрипт на своем компьютере и, например, привязать его к сочетанию клавиш.
Замечания:
man xdotool
говорит оgetwindowpid
субкоманда:"Это требует усилий со стороны приложения, владеющего окном, и может работать не для всех окон".
Другими словами, он может не работать вообще или, по крайней мере, не совсем так, как предполагалось для некоторых приложений.
Может также случиться, что несколько окон имеют одинаковый соответствующий идентификатор процесса, как, например, все экземпляры gnome-терминала принадлежат одному и тому же родителю. В этом случае команда заморозит их всех, что может быть не предназначено.
Улучшение Byte Commander♦ ответ:
Для этого есть скрипт на основе xdtool: https://github.com/RegisterFault/clickstop
Скрипт Bash, использующий xdotool для отправки сигналов SIGSTOP и SIGCONT в дерево процессов приложения, по которому щелкнули
Преимущество состоит в том, что он приостановит все дерево процессов, что необходимо, например, для приостановки многопроцессорных Chrome или Firefox.