Вопрос
Вы знаете, что какой-либо инструмент/сценарий отправляет SIGSTOP
(для приостановки процесса) или SIGCONT
(для возобновления его) к процессу путем нажатия на графическое окно, сгенерированное процессом?
Некоторый контекст
Уже существует названный инструмент xkill
который закрывает программы путем нажатия на окно, но оно не имеет никаких опций отправить конкретный сигнал. Это - жалость, потому что несколько связанные инструменты командной строки как kill
имейте эту опцию.
Обычно я делаю это через командную строку путем ручного получения соответствующих имен процесса и использования инструментов как kill
, pkill
или killall
но было бы хорошо смочь сделать это графически, в некотором роде подобный нажатию на окно с xkill
инструмент.
Приложения
Я нашел бы такой инструмент очень полезным для графической приостановки некоторых тяжелых процессов, когда ЦП слишком "подчеркнут", не завершая их и не теряя данные, которые не могут быть сохранены (например, для частичных результатов долгих вычислений).
Вы можете использовать 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
:«Это требует усилий со стороны приложения, владеющего окном, и не может работа для всех окон. "
blockquote>Другими словами, он может не работать вообще или, по крайней мере, не совсем так, как предполагалось в некоторых приложениях.
BLOCKQUOTE>
Также может случиться, что несколько окон имеют одинаковый соответствующий идентификатор процесса, например, например. все экземпляры gnome-терминала принадлежат одному и тому же родителю. В этом случае команда заморозит их всех, что может быть и не предназначено.
Улучшение Командующего Байта ответ ♦:
Существует базирующийся сценарий xdtool для этого: https://github.com/RegisterFault/clickstop
Сценарий Bash, который использует xdotool для отправки SIGSTOP и SIGCONT, сигнализирует к дереву процесса приложения, на которое нажали
Преимущество - это, приостановит целое дерево процесса, которое необходимо, например, для приостановки хрома мультипроцесса или Firefox.