特定のアプリケーションが終了するまで待ってから別のものを起動します
質問
OS Xは、FULL .APPパスで指定された特定のアプリケーションが終了するまで待機するosascriptコマンドを実行したい。/usr/bin/open -n /Applications/MyApp.app
を使用してください。
申請が終了するまで待機方法?
解決
一般的なアプローチは、例えばpgrep
:
while pgrep -f /Applications/TextEdit.app 2>/dev/null ; do sleep 1.0 ; done
.
残念ながら、これは多すぎると他のアプリケーションの開始を遅らせるでしょう。
あるいは、アプリケーションが実行されていることがわかっている場合は、/usr/bin/open
:
open -g -W /Applications/TextEdit.app
.
残念ながら、これは実行されていない場合はアプリケーションを開きます。/usr/bin/open
を呼び出す前に実行されていることを確認できますが、これはアトミックではありません。閉じることができ、Openコマンドが再起動できる可能性があります。
両方はOSASCRIPTにカプセル化することができます(おそらくそれほど意味がありません)。
osascript -e 'do shell script "while pgrep -f /Applications/TextEdit.app 2>/dev/null ; do sleep 1.0 ; done"'
osascript -e 'do shell script "open -g -W /Applications/TextEdit.app"'
.
サイドとして注:open -W
は実際にプロセス上のKQUQUEUE WAIT(非ポーリング待ち)を実行します。アプリケーションの再起動をリスクすることなく、KQUEUEを呼び出して同じタスクを実行する他のコマンドがあるかもしれません。Cで実装するのは非常に簡単です。
所属していません StackOverflow