我目前使用的存在嚴重缺陷的方法是:
tasklist /FI "WINDOWTITLE eq BLABLABLA" /NH
上面的 BLABLABLA 部分是目前確切的進程標題。 (甚至不要讓我開始了解它沒有自己的引號,因此無法輕鬆/正確地轉義/保護這一事實。)
這樣做的問題是,只要進程標題有一個字元不同,根據此邏輯,它就會被視為不同的腳本。例如,我一直在視窗/進程標題中添加各種有用的提示,例如:
Actual title (5 seconds left...)
和:
[FINISHED] Actual title
和:
Actual title (4 / 9 items left)
和:
Actual title (35% downloaded)
等等。你明白了。進程標題經常更改,因此檢查唯一腳本並不可靠。
我發現的唯一其他方法是引用他們所謂的“IMAGENAME”(這顯然意味著“可執行名稱”):
tasklist /FI "IMAGENAME eq php.exe" ...
這是當然的更糟因為它只會列出任何 php.exe 腳本!
我對「tasklist」命令的實驗(使用 --verbose 輸出並閱讀其手冊)沒有透露任何檔案路徑或任何唯一的每個檔案 ID 或類似內容。
為什麼它不能讓我做這樣的事情?
tasklist /FI "FILEPATH eq BLABLABLA" /NH
?
我曾想過自己在資料庫中追蹤正在運行的腳本,但當事情沒有完全按計劃進行時,它似乎效率極低且不可靠。使用作業系統提供的指令肯定是最好的(除非 PHP 內建了這個指令)。
我確實知道“eq”過濾器接受星號在右端,但由於上述原因,這對我沒有幫助。
我是嗎真的沒有其他選擇,只能坐下來解析完整的任務清單輸出,並嘗試刪除流程標題的任何「動態」部分,以便我可以計算與運行程式碼的腳本具有「相同」流程標題的正在運行的腳本的數量?感覺非常黑客和愚蠢。它不能一定要以正確的方式...
(PS:你知道,我一直對有多少“明顯”(僅對我而言,顯然)的東西和功能缺失感到困惑。在 Windows 和 Linux 上都是一樣的。我認為這些東西是“最低限度”在某種程度上被其他人認為是多餘/無用的,這真的讓我想知道...)
答案1
您可以使用以下方法細化結果:
tasklist /fi "imagename eq php.exe" /v | find /i "Actual title"