tasklist 用來抓取process PID.
今天朋友出了一個問題:
[下午 02:06:38] 安佳脫脂奶粉: CMD有辦法作到偵測程式結束嗎? |
我第一個反應就是去抓PID,然後去Monitor這個PID做判斷.
算時職業使然吧,在Linux下寫script去處理PID算是很經常的問題.
但是,今天換在Windows呢?我有哪些工具可以用是第一個問題.
“我跟Windows powershell不熟”
說來好笑,自身對於程式語言的歷程就是從DOS622上寫batch啟蒙.
當年如何在奔騰時代卻還在用486SX的我,想盡辦法要在僅有8M的RAM上玩遊戲.
於是config.sys autoexe.bat調MENU就是我學習語言的開始,也不過是自動開機選單.
但是後來在北興國中的資訊室接觸了Linux,高中還跑去台南聯成上梁楓的課.
到踏入了大學殿堂,Linux shell反而卻變成我最習慣的環境,一直到現在出社會.
扯遠了,重點是如何在指令介面得到PID? 孤狗永遠是最好的老師.
把PID, windows, command line丟進去找到這篇文章:
太好了,有tasklist可以用.這樣就可以取得PID,剩下就是字串處理與邏輯的問題
甚至拿範例程式來兜成朋友想要的應該就可以了,我這麼想.
“沒想到是我思考的盲點”
寫Script習慣了豐富的linux shell提供的指令環境,處理與process有關就是針對PID
追蹤.於是怎麼把PID取下來再監看是我的直覺反應,但其實朋友要的只需要知道
process在不在,並不用刻意去記憶PID的.後來討論到如果實現了Monitor PID接下來要做什麼.
才想到return code, 於是tasklist會不會return error code是簡化整個batch的方向.
沒錯又是Google:
http://stackoverflow.com/questions/4969595/exit-status-of-tasklist-in-batch-file
直接把資料流導給find再讓find來return error level,這隻程式大致上就完成了.
|
我系統上沒有firefox 所以errorlevel=1,正在執行chrome 所以return 0
寫這篇單純想留下個紀錄,搞不好那天我自己會用的到,畢竟對powershell不如linux bash熟
並提醒自己有時候思考邏輯會陷入憑藉經驗上的盲點卻不自知.
而朋友的鍥而不捨也才有後面引出,用errorlevel的方式查驗process name 並由find來定位,
汎洪的池塘通常由小小的石頭引起,不過得先要有足夠的水量開始,每次的筆記就是我小小的累積.
這是朋友的CODE範例:
@echo off :ONE tasklist | find "SLDWORKS.exe" echo Error level = %ERRORLEVEL% if errorlevel=1 goto ONE if errorlevel=0 goto ZERO goto END :ZERO cls echo a Zero was returned! pause goto END :END |
refer:
易學易用的 Windows PowerShell: http://www.microsoft.com/taiwan/technet/columns/profwin/28-monad.mspx
批次檔 ERRORLEVELs 的正確測試的優先順序: http://support.microsoft.com/kb/39585/zh-tw