2016-05-16 93 views
3

短版:找到,如果工藝窗口是活

  • 在與PID窗戶,我的程序需要看看我的進程仍然在運行/活着。

在linux中,我只是使用「grep pid」,並且所有的操作都可以完成,類似於windows中的任何操作?


加長版:

我正在Windows上的PHP(7)系統,該系統運行的藍牙Java服務器。我的系統通過運行命令行的服務器,節省了PID:

$command = 'java -jar app\InterfaceBluetooth.jar /k > storage\logs\bluetoothServerToten.txt'; 
    $descriptorspec = array (
     0 => array("pipe", "r"), 
     1 => array("pipe", "w") 
    ); 

    if(is_resource($prog = proc_open("start /b " . $command, $descriptorspec, $pipes))){ 
     $ppid = proc_get_status($prog)['pid']; 
    }// IF 
    else{ 
     // error stuff 
     exit(); 
    }// ELSE 

    $output = array_filter(explode(" ", shell_exec("wmic process get parentprocessid,processid | find \"$ppid\""))); 
    array_pop($output); 
    $pid = end($output); 

所以,在這一點上,過程和運行,我有PID。

現在,重要的是用戶可以確定服務器正在運行。在某些情況下,我的系統需要檢查這個,這可以回到短版本。

無論如何,PHP 7的功能,命令行或其他方式,只是爲了我的系統能夠找出它是否正在運行。

+0

你有沒有通過藍牙服務器的源代碼控制?如果是這樣,進入你的藍牙服務器實現簡單的'hello-service',它監聽一個特殊的端口。然後在你的其他應用程序中發送一個網絡數據包到這個hello-port並等待響應。如果服務器響應,則啓動並運行,否則不啓動。這種方式比記憶和處理進程ID令牌要好。 – 2016-05-16 14:12:39

+0

你在問兩個不同的事情:'1'給定一個PID,我怎麼知道這個過程已經達到了可以進行通信的階段? '2'給定一個PID,我怎麼知道一個進程仍在運行並響應請求?對這兩個問題的答案可能是不同的。 – IInspectable

+0

@RafaelOsipov我做了藍牙服務器,但我選擇用java來做,因爲我無法在PHP或JS中進行通信。發送網絡數據包將是迄今爲止最好的方式,而不是當時的選擇。 –

回答

2

如果您只需要等效於ps aux | grep PID,請嘗試tasklist /nh /fi "pid eq PID"

+0

錯誤:無法識別搜索過濾器。 :( –

+0

替代你的進程ID代替'PID',例如,如果你的進程ID是1423,查詢將是'tasklist/nh/fi「pid eq 1423」' – Tair

+0

我不相信那個..我是替換PID(tasklist/nh/fi 1234)的「pid eq PID」¬¬..但是它有50個獎金^^「 –

1

下面簡單的執行命令和捕捉輸出:

TASKLIST /v /fi "PID eq your_pid" 
+0

錯誤:無法識別搜索過濾器 :( –