web-dev-qa-db-fra.com

Envoi de signaux SIGSTOP ou SIGCONT graphiquement (similaire à xkill)

Question

Connaissez-vous un outil/script pour envoyer SIGSTOP (mettre en pause un processus) ou SIGCONT (le reprendre) à un processus en cliquant sur une fenêtre graphique générée par ce processus?

n peu de contexte

Il existe déjà un outil appelé xkill qui tue les programmes en cliquant sur une fenêtre, mais il ne dispose d'aucune option pour envoyer un signal particulier. C'est dommage, car des outils en ligne de commande quelque peu liés, comme kill, ont cette option.

Habituellement, je le fais en ligne de commande en obtenant manuellement les noms de processus correspondants et en utilisant des outils tels que kill, pkill ou killall, mais il serait bien de pouvoir le faire graphiquement, dans un similaire à cliquer sur une fenêtre avec l’outil xkill.

Applications

Je trouverais un tel outil très utile pour suspendre graphiquement certains processus lourds lorsque le processeur est trop "stressé" sans les arrêter ni perdre de données qui ne peuvent pas être sauvegardées (par exemple pour des résultats partiels de longs calculs).

2
Kubuntuer82

Vous pouvez utiliser xdotool pour permettre à l'utilisateur de cliquer sur une fenêtre et d'obtenir son ID de processus. Ensuite, vous pouvez utiliser kill pour envoyer, par exemple, STOP ou CONT signale ce processus et gèle/décongèle de cette façon.

Tout d'abord, vous devez probablement installer xdotool, car il n'est pas préinstallé:

Sudo apt install xdotool

Ensuite, la commande pour obtenir le PID du processus possédant une fenêtre spécifique, qui peut être sélectionnée en cliquant avec la souris, serait:

xdotool selectwindow getwindowpid

Ceci imprime l'ID de processus numérique. Vous pouvez utiliser le fournir comme argument pour kill -STOP ou kill -CONT pour suspendre et poursuivre ledit processus. Ceci peut être simplifié en stockant le PID dans une variable, comme dans ce petit script ci-dessous, qui met en pause le processus de la fenêtre cliquée pendant 5 secondes:

#!/bin/bash
wpid="$(xdotool selectwindow getwindowpid)"
kill -STOP "$wpid"
sleep 5
kill -CONT "$wpid"

Vous pouvez maintenant enregistrer ce script sur votre ordinateur, par exemple. liez-le à un raccourci clavier.

Remarque:man xdotool dit à propos de la sous-commande getwindowpid:

"Cela nécessite un effort de la part de l'application possédant une fenêtre et risque de ne pas fonctionner pour toutes les fenêtres."

En d'autres termes, il se peut que cela ne fonctionne pas du tout ou du moins pas exactement comme prévu avec certaines applications.
Il peut également arriver que plusieurs fenêtres aient le même ID de processus correspondant, comme par exemple. toutes les instances de gnome-terminal appartiennent au même parent. Dans ce cas, la commande les gèlera toutes, ce qui pourrait ne pas être voulu.

2
Byte Commander

Améliorer la réponse de Byte Commander ♦:

Il existe un script basé sur xdtool pour cela: https://github.com/RegisterFault/clickstop

Script Bash utilisant xdotool pour envoyer des signaux SIGSTOP et SIGCONT à l'arborescence de processus d'une application sur laquelle l'utilisateur a cliqué

L’avantage est de suspendre tout l’arbre du processus, ce qui est nécessaire, par exemple, pour suspendre le multi-processus chrome ou firefox.

1
kotofos