2016-12-02 85 views
0

我正在從蘋果腳本啓動一個jar應用程序。如何在後臺從蘋果腳本運行多個shell腳本

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應用程序。

但我需要啓動另一個應用程序表單shell腳本。

因爲我在可可應用程序中這樣做,我想在後臺執行此操作。

因此,我可以在終端的多個實例中啓動多個腳本(這樣它們就不會互相阻塞)。

注意:我通過在兩個不同的終端窗口中運行命令來測試它,按預期工作。

+0

如果你不想等待,做片腳本「命令結束時,你必須重定向它的輸出別的地方,到一個文件或無處。例如在'do shell'命令末尾添加' pbell

+0

@pbell我遇到了解決方案並將其作爲備份。但這個想法是啓動兩個後臺進程。這樣做可以讓我在退出罐子時回電給我的可可應用程序。 –

回答

1

請參閱Technical Note TN2065,特別是對「我想啓動後臺服務器進程;如何讓shell腳本不要等到命令完成?和「我已經開始了一個後臺進程;我如何獲得它的進程ID,以便我可以用其他shell命令控制它?」。

的AppleScript的代碼運行在後臺兩個命令應該是這樣的:

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

和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