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).
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-commandegetwindowpid
:"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.
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.