Comment vérifier si une application est en cours d'exécution avec un script bash

J'ai l'application gnome-run dans mon dossier personnel. J'ai maintenant ajouté l'application à exécuter lorsque j'appuie sur Meta + R (je l'ai ajouté dans ccsm). Le problème est que si j'ai le programme gnome-run ouvert et que j'appuie sur la combinaison de touches je veux que l'application se ferme. Existe-t-il un moyen de créer un file bash qui vérifie si les applications sont en cours d'exécution, s'il est ensuite fermé, sinon lancez-le.

Je lance l'application comme ./gnome-run dans mon dossier personnel.
Je ne trouve pas le process de request dans ps -A ou quoi que ce soit.

Merci

Ce script shell doit gérer le démarrage et l'arrêt de tout programme:

 #!/bin/bash BASECMD=${1%%\ *} PID=$(pgrep "$BASECMD") if [ "$?" -eq "0" ]; then echo "at least one instance of "$BASECMD" found, killing all instances" kill $PID else echo "no running instances of "$BASECMD" found, starting one" $1 fi 

disons que vous l'avez sauvegardé sous ~/mystarter , vous pouvez exécuter n'importe quelle command avec ~/mystarter <name> , par exemple dans votre cas, lier Meta + R à:

 ~/mystarter gnome-run 

et assurez-vous que le script est exécutable: chmod u+x ~/mystarter . En outre, il est probablement préférable de le placer quelque part dans votre PATH , de sorte que vous ne devez pas taper son location à chaque fois.

Quant au fait que gnome-run ne s'affiche pas dans ps -A , assurez-vous que gnome s'exécute lui-même n'est pas un script qui lance le process réel. Vérifiez s'il existe une différence entre ps -A | wc -l ps -A | wc -l avant et après le lancement (cela count tous les process en cours).

Modifier:

Puisque vous avez accepté la réponse, j'ai pensé que j'appendais le support pour l'exécution des commands qui ont des arguments de command line, pour que cela devienne un lieu de reference. Exécutez une command comme ceci:

  ./mystarter 'cmd args' 

par exemple:

 ./mystarter 'ncmpcpp -c ~/.ncmpcpp' 

La command search juste ncmpcpp pour voir si elle s'exécute déjà, mais exécute la command complète (avec des arguments) quand ncmpcpp n'était pas en cours d'exécution.