2014-04-22 57 views
0

我有一個Windows調度程序調用的Windows批處理文件。當我試圖讓多個Windows調度程序任務試圖同時運行批處理文件時,該批處理文件被第一個進程鎖定,並且所有其他實例都失敗。在Windows中同時運行批處理文件的多個實例?

Windows中是否有辦法同時運行批處理文件的多個實例?

我的腳本是一個簡單的它是所有:

set java_classpath 
java javaClass 
+0

如果您運行的批處理文件的同時多個實例在任務調度程序之外,它們運行嗎? –

+0

沒有窗口鎖定正在運行該文件的當前進程的文件。 – user2154424

+1

難道是批處理文件有一些重定向到另一個文件,並且這個文件被鎖定? Windows不鎖定批處理文件,我寫了一些批處理文件,在運行時修改自己。 –

回答

1

沒有什麼固有限制的,可以同時運行同一個腳本的進程數批處理文件力學。實際的批處理腳本在運行時未鎖定。實際上,可以在運行時修改批處理腳本,但這通常是一個非常糟糕的主意。

但批處理腳本可以採取任何數量的操作來防止同時運行。最明顯的是如果腳本嘗試將輸出重定向到特定文件(常量路徑和名稱)。輸出重定向建立一個獨佔鎖,它將阻止任何其他進程獲得相同的鎖。

另一種可能性是您的腳本可能會調用外部命令或程序,以某種方式建立排他鎖。

無論哪種方式,都不應該阻止多個進程同時啓動相同的腳本。但是,如果腳本建立了獨佔鎖定,則一個(或多個)實例可能會過早崩潰或退出,或者似乎掛起,這取決於如何處理失敗的鎖定採集。

除非您發佈實際的腳本,否則沒有任何方法可以更具體。但是,如果它是一個很長的腳本,那麼你應該試圖在發佈之前找出發生問題的位置。

+0

在問題中添加了我的批處理腳本。我的批處理是簡單的,它所做的就是運行設置java類路徑並運行java類 – user2154424

+0

在批處理腳本本身中肯定沒有會導致問題的東西,但java是可以建立獨佔性的外部程序的示例鎖。你的java類中必須有一些阻止並行運行的東西。這不是批處理文件問題。 – dbenham

0

Windows 8的任務調度程序有以下幾個選項(在最後,「設置」選項卡): 如果任務已經運行,則遵循以下規則:

  • 不要啓動一個新的實例(默認)
  • 並行運行
  • 實例...

也許你應該更改此設置。而且,我建議你看看http://serverfault.com並在那裏發帖。

0

您是否嘗試過使用%systemroot%\cmd.exe /K C:\path\batchfile.bat來調用您的批處理文件?用/ K每次打開一個新的cmd實例時,猜測它是shell而不是讓你感到奇怪的文件。

0

的人來到這裏,從谷歌只是在尋找一種方式來同時運行.bat文件的多個實例,一個簡單的方法是將這個腳本:

set N=3 
for /L %%i in (1,1,%N%) do (
    start yourscript.bat 
) 
相關問題