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-command
und dann kill -9 <PID>
.
Wie kann ich "MyApp.app" beenden (wie bei Control-C im Terminal)?
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.
Das Öffnen einer Automator-Anwendung startet einen Prozess namens Application Stub
, killall Application\ Stub
beendet 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 say
Automator 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
Juliomalegrie