Отправка SIGSTOP или SIGCONT сигнализирует графически (подобный xkill)

Вопрос

Вы знаете, что какой-либо инструмент/сценарий отправляет SIGSTOP (для приостановки процесса) или SIGCONT (для возобновления его) к процессу путем нажатия на графическое окно, сгенерированное процессом?

Некоторый контекст

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

Обычно я делаю это через командную строку путем ручного получения соответствующих имен процесса и использования инструментов как kill, pkill или killall но было бы хорошо смочь сделать это графически, в некотором роде подобный нажатию на окно с xkill инструмент.

Приложения

Я нашел бы такой инструмент очень полезным для графической приостановки некоторых тяжелых процессов, когда ЦП слишком "подчеркнут", не завершая их и не теряя данные, которые не могут быть сохранены (например, для частичных результатов долгих вычислений).

2
задан 23 April 2018 в 21:56

2 ответа

Вы можете использовать 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-терминала принадлежат одному и тому же родителю. В этом случае команда заморозит их всех, что может быть и не предназначено.

2
ответ дан 2 December 2019 в 02:43

Улучшение Командующего Байта ответ ♦:

Существует базирующийся сценарий xdtool для этого: https://github.com/RegisterFault/clickstop

Сценарий Bash, который использует xdotool для отправки SIGSTOP и SIGCONT, сигнализирует к дереву процесса приложения, на которое нажали

Преимущество - это, приостановит целое дерево процесса, которое необходимо, например, для приостановки хрома мультипроцесса или Firefox.

1
ответ дан 2 December 2019 в 02:43

Другие вопросы по тегам:

Похожие вопросы: