比如有個 a.exe 在 C:\test 和 C:\test\test 目錄下,在兩個目錄下把a.exe都運行,然後工作管理員裡面就出現了兩個a.exe 怎麼用php關閉,指定目錄下的a.exe 比如我想關閉C:\test\test 下的啟動並執行a.exe該怎麼辦
回複討論(解決方案)
windows不瞭解。
linux下,運行一個進程後都會有一個唯一的pid。可以通過一個shell指令碼來運行php指令碼的進程作為其子進程,運行後可以得到各自的pid,然後kill的時候直接kill相關的pid既可。
php本身也可以通過getmypid函數擷取當前指令碼進程pid。不過似乎是不能殺死自身進程,還是需要個master進程對來控制。
python不太會,如果是ruby的話,程式自己也能獲得pid,但貌似也無法殺死自己。
最簡單的方法就是用shell做主控進程。
向作業系統發出相應的命令就可以了
但遺憾的是:你做不到,因為 php 沒有足夠的許可權
windows不瞭解。
linux下,運行一個進程後都會有一個唯一的pid。可以通過一個shell指令碼來運行php指令碼的進程作為其子進程,運行後可以得到各自的pid,然後kill的時候直接kill相關的pid既可。
php本身也可以通過getmypid函數擷取當前指令碼進程pid。不過似乎是不能殺死自身進程,還是需要個master進程對來控制。
pytho…… windows 下也有唯一的pid 不過主要是你不知道哪個pid是屬於哪個目錄下的程式,我要做的相當與是一個監控程式,監控該目錄下的那個程式記錄的日誌情況,如有問題就關閉該目錄下的那個進程,但是其他目錄下又有同名的進程
向作業系統發出相應的命令就可以了
但遺憾的是:你做不到,因為 php 沒有足夠的許可權
你用一個單獨的指令碼來啟動你所謂的兩個不同的目錄的程式,啟動後可以立刻獲得其pid,然後就記錄下來唄。不過還是那個問題,php貌似沒那個許可權殺掉系統進程。
不太熟悉windows的批處理,在linux下,這個主控進程應該用shell指令碼來做。它負責啟動兩個進程,啟動後立刻記錄進程pid,並且可以與哪個目錄的程式關聯起來。
tasklist 列出所有的進程,和相應的資訊
tskill 查殺進程
更一般的
ntsd -c q -p PID
但你肯定是不可能用運行於 web 方式下的 php 實現的
但你可以用 VC 或 VB 寫個小程式間接實現
相關代碼在網上有,一搜一大堆。因為這是個普遍的需求
你用一個單獨的指令碼來啟動你所謂的兩個不同的目錄的程式,啟動後可以立刻獲得其pid,然後就記錄下來唄。不過還是那個問題,php貌似沒那個許可權殺掉系統進程。
不太熟悉windows的批處理,在linux下,這個主控進程應該用shell指令碼來做。它負責啟動兩個進程,啟動後立刻記錄進程pid,並且可以與哪個目錄的程式關聯起來。 那兩個進程是自己手動啟動,不是通過管理啟動,所以沒記pid
#7 給你的是 window 下的
linux 下可用 ps 擷取進程列表,用 kill 殺死進程
當然還是那句話:你需要有做夠的許可權!web 方式下的 php 許可權不夠
已成功 謝謝各位 $path = array("C:\test","C:\test\test");
exec("wmic process where name='a.exe' get executablepath,processid", $result, $return);
if($return != 0)
return;
foreach ($result as $rows)
{
$data = preg_split("/ +/", $rows);
if(in_array($data[0],$path))
{
system("ntsd -c q -p ".$data[1], $return1);
if($return1 == 0)
echo "close success";
else
echo "close failed";
}
}
?>