3 votes

Créer une application automate capable de se lancer et de se quitter depuis le dock.

J'ai une commande shell qui tourne sans fin, jusqu'à ce que vous l'arrêtiez en utilisant Control-C . Lorsque je l'exécute à partir du Terminal, cela donne quelque chose comme :

$ /abspath/to/my-command
Command is running ...
Use Control-C to stop it.

Je voulais pouvoir lancer cette commande facilement à partir du dock, j'ai donc créé une application Automator, avec seulement un bouton Exécuter le Shell script où j'ai écrit /abspath/to/my-command . Ensuite, j'ai enregistré "MyApp.app" dans mon dossier Applications et je l'ai glissé et déposé dans le dock.

Jusqu'à présent, cela fonctionne très bien, lorsque je clique sur l'application dans le dock, la commande commence à s'exécuter. Il y a juste un énorme problème : je ne peux pas quitter l'application ! En fait, dans le dock, il n'apparaît même pas que l'application est en cours d'exécution. La seule solution que j'ai trouvée jusqu'à présent est de faire ps aux | grep my-command et ensuite kill -9 <PID> .

Comment puis-je quitter "MyApp.app" (comme en faisant Control-C dans le Terminal) ?

1voto

markhunte Points 11634

Votre application démarre le processus puis se termine directement en laissant le processus en cours.

Vous pouvez essayer de vérifier dans l'action Automator si le processus est en cours d'exécution. S'il l'est, quittez-le, sinon lancez-le.

 isRunning=`ps aux | grep -i "Textedit.app"| grep -v grep`

    if [ $isRunning -eq "" ]; then 
        echo "is Not Running" 

/abspath/to/my-command
    else
        echo "is Running"  

# terminate code  here
    fi;

Ainsi, lorsque vous cliquez sur l'application dans le Dock, vous pouvez soit lancer le processus, soit l'arrêter.

1voto

L'ouverture d'une application Automator lance un processus nommé Application Stub mais killall Application\ Stub ne met pas fin à ses processus enfants.

$ sleep 1 && open ~/Desktop/Untitled.app/ & sudo execsnoop
[1] 650
  UID    PID   PPID ARGS
  501    655    650 open
  501    656    143 Application Stub
  501    657    143 Automator Launch
  501    658    656 bash
  501    658    656 say

pkill -P $(pgrep Application\ Stub) y killall say a fait en sorte que Automator affiche une boîte de dialogue indiquant que le flux de travail a rencontré une erreur.

Si vous utilisiez une application AppleScript à la place, elle pourrait être arrêtée à partir du Dock ou avec killall applet .

Ou si vous ne voulez pas garder une fenêtre shell ouverte, utilisez disown ou launchctl submit :

say {1..99} & disown $! # stop with killall say
launchctl submit -l my.say say {1..99} # stop with launchctl remove my.say

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X