短版:找到,如果工藝窗口是活
- 在與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的功能,命令行或其他方式,只是爲了我的系統能夠找出它是否正在運行。
你有沒有通過藍牙服務器的源代碼控制?如果是這樣,進入你的藍牙服務器實現簡單的'hello-service',它監聽一個特殊的端口。然後在你的其他應用程序中發送一個網絡數據包到這個hello-port並等待響應。如果服務器響應,則啓動並運行,否則不啓動。這種方式比記憶和處理進程ID令牌要好。 – 2016-05-16 14:12:39
你在問兩個不同的事情:'1'給定一個PID,我怎麼知道這個過程已經達到了可以進行通信的階段? '2'給定一個PID,我怎麼知道一個進程仍在運行並響應請求?對這兩個問題的答案可能是不同的。 – IInspectable
@RafaelOsipov我做了藍牙服務器,但我選擇用java來做,因爲我無法在PHP或JS中進行通信。發送網絡數據包將是迄今爲止最好的方式,而不是當時的選擇。 –