2016-12-02 60 views
0

リンゴスクリプトからjarアプリケーションを起動します。applescriptから複数のシェルスクリプトをバックグラウンドで実行する方法

do shell script quoted form of jvmpath & " -jar -XstartOnFirstThread -Dapple.awt.UIElement=true -Dfile.encoding=UTF8 " & quoted form of jarpath & " " & quoted form of parameters 

私のjarアプリケーションを終了するまで、スクリプトは実行され続けます。

しかし、別のアプリケーションフォームシェルスクリプトを起動する必要があります。

私はCocoaアプリでこれをやっているので、これをバックグラウンドでやりたいと思っています。

こうして、私はターミナルの複数のインスタンスで複数のスクリプトを起動することができます(互いにブロックしないように)。

注:2つの異なるターミナルウィンドウでコマンドを実行してテストしましたが、期待どおりに動作します。

+0

「do sheet script」コマンドの終了を待たずに、出力を別の場所にリダイレクトする必要があります。ファイルまたはどこにもありません。たとえば 'do shell'コマンドの最後に ' pbell

+0

@pbell私は解決策を見つけ、バックアップとして持っています。しかし、その考え方は2つのバックグラウンドプロセスを開始することです。そうすることで、jarが終了したときに私のココアアプリにコールバックすることができます。 –

答えて

1

Technical Note TN2065を参照してください。具体的には、「バックグラウンドサーバープロセスを開始したいのですが、シェルスクリプトはコマンドが完了するまで待たないでください。 「バックグラウンドプロセスを開始しましたが、そのプロセスIDを取得して他のシェルコマンドで制御できるようにするにはどうすればよいですか?」

バックグラウンドで2つのコマンドを実行するためのAppleScriptコードは次のようになります。

set pid1 to do shell script command1 & " &> /dev/null & echo $!" 
set pid2 to do shell script command2 & " &> /dev/null & echo $!" 

PID1とPID2変数は二つのコマンドのプロセスIDに設定されます。後で、このような関数を呼び出すことによって、コマンドがまだ実行中かどうかを確認することができます。

on isProcessRunning(pid) 
    try 
     do shell script "kill -0 " & pid 
     set isRunning to true 
    on error 
     set isRunning to false 
    end try 
    return isRunning 
end isProcessRunning 
関連する問題