Mettre un processus en pause en un clic
Résolu/Fermé
othmane94
Messages postés
150
Date d'inscription
jeudi 19 janvier 2012
Statut
Membre
Dernière intervention
30 janvier 2013
-
25 avril 2012 à 15:51
mamiemando Messages postés 33378 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 25 novembre 2024 - 28 avril 2012 à 11:24
mamiemando Messages postés 33378 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 25 novembre 2024 - 28 avril 2012 à 11:24
A voir également:
- Mettre en pause un processus linux
- Mettre tamagotchi en pause - Forum Jeux vidéo
- Imprimante en pause hp ✓ - Forum Imprimante
- Cmd pause ✓ - Forum Windows
- Linux mint 32 bits - Télécharger - Systèmes d'exploitation
- Imprimante bloquée sur pause ✓ - Forum Imprimante
5 réponses
mamiemando
Messages postés
33378
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
25 novembre 2024
7 802
Modifié par mamiemando le 25/04/2012 à 21:00
Modifié par mamiemando le 25/04/2012 à 21:00
Oui c'est possible :
http://linuxpoison.blogspot.com/2007/11/temporarily-suspend-process.html
Un exemple : je lance une application graphique par exemple kwrite :
Je vois que son PID est 2948
Pour le mettre en pause :
Pour le reprendre :
Dans ton cas, il suffit de configurer dans ton environnement graphique un raccourci clavier pour lancer la bonne commande. Ensuite tu dois récupérer le PID de la fenêtre et injecter son résultat dans la commande kill. Pour cela je pense que tu peux t'inspirer de ça pour combiner correctement xprop et xdpyinfo
https://www.linuxquestions.org/questions/programming-9/getting-the-pid-of-the-top-active-window-776938/
En effet, cette commande permet de récupérer le window ID d'une fenêtre :
Ensuite, on peut injecter cet ID dans xprop. Exemple : si je lance cette commande et que je clique sur la fenêtre de chromium j'obtiens :
Ok, on voit qu'on a bien les informations de la fenêtre qui nous intéresse. Il ne reste plus qu'à extraire du résultat de xprop le morceau qui nous intéresse, en gras ci-dessus, le PID.
On voit qu'on récupère bien le PID de la fenêtre sur laquelle on clique. Il ne reste plus qu'à injecter ce résultat dans un "kill -CONT" (ou -STOP) et enfin associer cette commande au bon raccourci clavier
Bonne chance
http://linuxpoison.blogspot.com/2007/11/temporarily-suspend-process.html
Un exemple : je lance une application graphique par exemple kwrite :
(mando@aldur) (~) $ kwrite & [1] 2948
Je vois que son PID est 2948
(mando@aldur) (~) $ ps faux | grep kwrite mando 2948 3.7 1.6 308608 34316 pts/1 Sl 20:56 0:00 \_ kwrite mando 2951 0.0 0.0 7812 840 pts/1 S+ 20:56 0:00 \_ grep kwrite
Pour le mettre en pause :
(mando@aldur) (~) $ kill -STOP 2948
Pour le reprendre :
(mando@aldur) (~) $ kill -CONT 2948
Dans ton cas, il suffit de configurer dans ton environnement graphique un raccourci clavier pour lancer la bonne commande. Ensuite tu dois récupérer le PID de la fenêtre et injecter son résultat dans la commande kill. Pour cela je pense que tu peux t'inspirer de ça pour combiner correctement xprop et xdpyinfo
https://www.linuxquestions.org/questions/programming-9/getting-the-pid-of-the-top-active-window-776938/
En effet, cette commande permet de récupérer le window ID d'une fenêtre :
xprop | grep "WM_CLIENT_LEADER" | cut -d"#" -f2
Ensuite, on peut injecter cet ID dans xprop. Exemple : si je lance cette commande et que je clique sur la fenêtre de chromium j'obtiens :
(mando@aldur) (~) $ xprop -id $(xprop | grep "WM_CLIENT_LEADER" | cut -d"#" -f2) ... WM_CLIENT_LEADER(WINDOW): window id # 0x3c00001 _NET_WM_PID(CARDINAL) = 2638 WM_LOCALE_NAME(STRING) = "fr_FR.UTF-8" WM_CLIENT_MACHINE(STRING) = "aldur" ... _NET_WM_NAME(UTF8_STRING) = "Chromium"
Ok, on voit qu'on a bien les informations de la fenêtre qui nous intéresse. Il ne reste plus qu'à extraire du résultat de xprop le morceau qui nous intéresse, en gras ci-dessus, le PID.
xprop -id $(xprop | grep "WM_CLIENT_LEADER" | cut -d"#" -f2) | grep PID | cut -d"=" -f2
On voit qu'on récupère bien le PID de la fenêtre sur laquelle on clique. Il ne reste plus qu'à injecter ce résultat dans un "kill -CONT" (ou -STOP) et enfin associer cette commande au bon raccourci clavier
kill -STOP $(xprop -id $(xprop | grep "WM_CLIENT_LEADER" | cut -d"#" -f2) | grep PID | cut -d"=" -f2)
Bonne chance
othmane94
Messages postés
150
Date d'inscription
jeudi 19 janvier 2012
Statut
Membre
Dernière intervention
30 janvier 2013
67
25 avril 2012 à 21:17
25 avril 2012 à 21:17
Merci beaucoup pour ta réponse.
En fait je n'ai pas compris grand chose car je suis encore un débutant de Linux, mais n'empêche que je vais essayer de comprendre et de le faire, Merci encore une fois : )
En fait je n'ai pas compris grand chose car je suis encore un débutant de Linux, mais n'empêche que je vais essayer de comprendre et de le faire, Merci encore une fois : )
mamiemando
Messages postés
33378
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
25 novembre 2024
7 802
Modifié par mamiemando le 26/04/2012 à 00:57
Modifié par mamiemando le 26/04/2012 à 00:57
Je t'invite dans ce cas à lire les man des commandes dont je parle et à lire un cours sur les processus.
http://www.mistra.fr/tutoriel-linux-processus.html
Dans l'idée, une tâche qui tourne (un processus) est identifié par un numéro (le PID). Les commandes qui permettent de manipuler des processus prennent souvent un PID en paramètre. En outre, interrompre un processus, le mettre en pause etc... consiste à lui envoyer un signal. Le but du jeu est donc d'envoyer le bon signal au bon processus. Typiquement, la commande kill permet d'envoyer un signal à un processus. C'est la première étape de ton besoin.
Traditionnellement le PID se récupère en regardant dans la table des processus (avec les commandes ps ou top par exemple). Dans ton cas, c'est un peu différent, on aimerait récupérer le PID d'un processus associé à une fenêtre en cliquant dessus. On sent que c'est tout à fait possible puisque la commande xkill permet de tuer une application sur laquelle on clique. Malheureusement, aucune commande ne semble permettre de récupérer le fameux PID directement. C'est donc la deuxième partie de notre besoin, mais elle est plus complexe à réaliser.
La commande xprop permet un certain nombre d'informations, parmi lesquelles un window ID. La première commande xprop dont je parle permet de récupérer ce window ID. Ensuite, on peut passer en paramètre cette information à une autre commande xprop qui renvoie d'autres informations, parmi lesquelles le PID, et c'est ce que fait la seconde commande xprop.
Maintenant il ne reste plus qu'à recoller les deux parties du raisonnement ensemble, en passant en paramètre le PID à kill. Si je résume on a donc ce cheminement logique :
clic sur la fenêtre ~~> [xprop] ~~> window id ~~> [xprop] ~~> pid ~~> [kill] ~~> fenêtre mis en pause
(un peu comme en maths quand on écrivait f(g(h(x))) (bref il est tard, toutes mes excuses si ceci évoque des souvenirs douloureux :p), et cette composition de fonctions se représente en shell avec l'opérateur $(...) qui permet d'injecter le résultat d'une commande comme le paramètre d'une autre commande :
Je ne sais pas si c'est plus clair, je ne vois pas trop comment l'expliquer de manière simple ;-)
http://www.mistra.fr/tutoriel-linux-processus.html
Dans l'idée, une tâche qui tourne (un processus) est identifié par un numéro (le PID). Les commandes qui permettent de manipuler des processus prennent souvent un PID en paramètre. En outre, interrompre un processus, le mettre en pause etc... consiste à lui envoyer un signal. Le but du jeu est donc d'envoyer le bon signal au bon processus. Typiquement, la commande kill permet d'envoyer un signal à un processus. C'est la première étape de ton besoin.
Traditionnellement le PID se récupère en regardant dans la table des processus (avec les commandes ps ou top par exemple). Dans ton cas, c'est un peu différent, on aimerait récupérer le PID d'un processus associé à une fenêtre en cliquant dessus. On sent que c'est tout à fait possible puisque la commande xkill permet de tuer une application sur laquelle on clique. Malheureusement, aucune commande ne semble permettre de récupérer le fameux PID directement. C'est donc la deuxième partie de notre besoin, mais elle est plus complexe à réaliser.
La commande xprop permet un certain nombre d'informations, parmi lesquelles un window ID. La première commande xprop dont je parle permet de récupérer ce window ID. Ensuite, on peut passer en paramètre cette information à une autre commande xprop qui renvoie d'autres informations, parmi lesquelles le PID, et c'est ce que fait la seconde commande xprop.
Maintenant il ne reste plus qu'à recoller les deux parties du raisonnement ensemble, en passant en paramètre le PID à kill. Si je résume on a donc ce cheminement logique :
clic sur la fenêtre ~~> [xprop] ~~> window id ~~> [xprop] ~~> pid ~~> [kill] ~~> fenêtre mis en pause
(un peu comme en maths quand on écrivait f(g(h(x))) (bref il est tard, toutes mes excuses si ceci évoque des souvenirs douloureux :p), et cette composition de fonctions se représente en shell avec l'opérateur $(...) qui permet d'injecter le résultat d'une commande comme le paramètre d'une autre commande :
kill -STOP $(xprop -id $(xprop | grep "WM_CLIENT_LEADER" | cut -d"#" -f2) | grep PID | cut -d"=" -f2)
Je ne sais pas si c'est plus clair, je ne vois pas trop comment l'expliquer de manière simple ;-)
othmane94
Messages postés
150
Date d'inscription
jeudi 19 janvier 2012
Statut
Membre
Dernière intervention
30 janvier 2013
67
26 avril 2012 à 23:56
26 avril 2012 à 23:56
C'est déja suffisant, merci encore : )
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
mamiemando
Messages postés
33378
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
25 novembre 2024
7 802
28 avril 2012 à 11:24
28 avril 2012 à 11:24
De rien :-) Bonne continuation !