特定のアプリケーションが終了するまで待ってから別のものを起動します

StackOverflow https://stackoverflow.com//questions/24018890

  •  21-12-2019
  •  | 
  •  

質問

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で実装するのは非常に簡単です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top