Erstellen Sie eine Automator-Anwendung, die vom Dock aus gestartet und beendet werden kann

Ich habe einen Shell-Befehl, der endlos läuft, bis Sie ihn mit stoppen Control-C. Wenn ich es vom Terminal aus starte, sieht es so aus:

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

Ich wollte diesen Befehl einfach vom Dock aus starten können, also habe ich eine Automator-Anwendung mit nur einer Run Shell Script- Komponente erstellt, in der ich /abspath/to/my-command. Dann habe ich "MyApp.app" in meinem Anwendungsordner gespeichert und per Drag & Drop in das Dock gezogen.

Bisher funktioniert es hervorragend, wenn ich auf die App im Dock klicke, wird der Befehl ausgeführt. Es gibt nur ein großes Problem: Ich kann die Anwendung nicht beenden! Tatsächlich scheint es im Dock nicht einmal, dass die Anwendung ausgeführt wird. Die einzige Lösung, die ich bisher gefunden habe, ist zu tun ps aux | grep my-commandund dann kill -9 <PID>.

Wie kann ich "MyApp.app" beenden (wie bei Control-C im Terminal)?

Antworten (2)

Ihre App startet den Prozess und beendet sich dann sofort selbst, wobei der Prozess ausgeführt wird.

Sie können versuchen, die Automator-Aktion einzuchecken, um festzustellen, ob der Prozess ausgeführt wird. wenn es beendet ist, wenn nicht, starten Sie es.

 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;

Wenn Sie also im Dock auf die App klicken. to startet den Prozess entweder oder stoppt ihn.

Wie beende ich es?

Das Öffnen einer Automator-Anwendung startet einen Prozess namens Application Stub, killall Application\ Stubbeendet aber nicht seine untergeordneten Prozesse.

$ 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)und killall sayAutomator dazu gebracht, einen Dialog anzuzeigen, dass der Workflow auf einen Fehler gestoßen ist.

Wenn Sie stattdessen eine AppleScript-Anwendung verwendet haben, könnte diese über das Dock oder mit beendet werden killall applet.

Oder wenn Sie kein Shell-Fenster geöffnet lassen möchten, verwenden Sie disown oder launchctl submit:

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