让powershell同时只能运行一个脚本(进程互斥例子)
powershell,mutex,互斥,進程互斥,腳本互斥
powershell腳本互斥例子,在powershell類別文章中,聲明原創唯一。
powershell 傳教士 原創文章 2016-07-02 ,2017-10-10?更新。允許轉載,但必須保留名字和出處,否則追究法律責任
---【前言】---
??????? 有時候我們希望腳本并發,用多進程、多線程盡快地跑。也有時我們希望同時只能運行一個腳本。
linux中bash的做法是,腳本先檢測特定文件,沒有就建立這個文件,并運行。運行完后就刪除。 這種方法對于powershell來說已經out了,老奶奶了。這個方法有兩個弊端:
1 是慢,內存速度是磁盤文件的1000左右倍。
2 如果腳本非正常終止,沒有刪除特定文件,那么下一次腳本將無法運行。
而。net(powershell)給我們提供了【內存中的】特定值,就是用System.Threading.Mutex類,來讓powershell腳本享受二進制程序相同的待遇。
當然,我感覺還是有點不完美,即這個值是基于進程,而不是基于腳本。
?
---【腳本調用時的注意事項】---
??????? 正由于這個弊端,所以我們要在cmd中,這樣調用腳本:
powershell -file mutex_powershell進程互斥例子.ps1
即單開一個進程然后再調用,在powershell中調用腳本也是這樣。 當然也可以用start-process調用。就是不能直接調用。
假設你直接調用:
開兩個powershell進程。在powershell_a中運行這個腳本,把powershell_a進程注冊成了唯一。 再在powershell_b中再運行這個腳本,將永遠顯示“互斥失敗”。那是因為,即使powershell_a中的腳本運行結束了,但powershell_a這個進程還沒結束。
?
---【豬懂傻改 腳本例子】---
# PowerShell 進程(腳本)互斥的例子 $互斥名字 = 'Global\我代號為天王蓋地虎' $建立互斥成功否 = $flase $互斥對象 = New-Object System.Threading.Mutex ($true,$互斥名字,[ref]$建立互斥成功否) if ($建立互斥成功否) {write-host '互斥成功,開始干活!'start-sleep -Seconds 60 #你的任務$互斥對象.ReleaseMutex() | Out-Null$互斥對象.Dispose() | Out-Nullwrite-host '活干完了,釋放' } else { #?每個互斥腳本必須單獨占用一個進程!powershell傳教士 win7 ,win10,?powershell core v6.0 beta8 on linux測試通過write-host '互斥失敗 !' }?
謝謝看帖,完。
?
轉載于:https://www.cnblogs.com/piapia/p/5647205.html
總結
以上是生活随笔為你收集整理的让powershell同时只能运行一个脚本(进程互斥例子)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ArcObject开发时,axtoolb
- 下一篇: 给大忙人看的Java核心技术笔记(8、S