[英]PHP execute process in background and get results
我正在尋找一種在后台啟動過程(通過php)的簡單方法(我不希望我的php腳本等待結束)。 盡管我還需要處理其他流程,才能趕上執行結束才能做一些后續工作。
到目前為止,我已經開始以類似
pclose ( popen ( "\"start /B " . $commands . " > log.txt\"", "r" ) );
但是我不確定如何確定該過程是否終止(也許還為時過早,但是我無法使用popen並啟動/ B來找到更多有關該過程的信息)
我使用“開始”方式,因為理想情況下該解決方案應同時在Windows和Linux上運行。
任何輸入將不勝感激。 謝謝您的幫助!
我不得不執行類似的任務,盡管我使用的方法略有不同,但與您嘗試執行的操作非常相似,並且我經歷了套接字:
第一步:獲取進程PID並調用套接字文件
//windows
$desc = array(
0 => array("pipe", "r"),
1 => array("pipe", "w"),
);
$p = proc_open($command, $desc, $pipes);
$status = proc_get_status($p);
$ppid = $status["pid"];
$output = array_filter(explode(" ", shell_exec("wmic process get parentprocessid,processid | find \"$ppid\"")));
array_pop($output);
$pid = end($output);
//unix
$pid = trim(shell_exec(sprintf('%s > %s 2>&1 & echo $!', $command, $outputFile)))
//Call the daemon with the socket stuff and pass the pid
shell_exec("path/to/daemon.php $pid");
第二步:守護程序文件
daemon.php應該打開一個套接字,該套接字定期檢查具有給定pid的進程是否仍在運行,如果沒有運行,則發送一條消息並退出該進程。 我沒有發布套接字的東西,因為我認為有很好的庫,而我的方法是手工制作的,這會使它很難理解。
第三:在需要的地方處理套接字消息
可能您想用javascript做到這一點
<script language="javascript" type="text/javascript">
$(document).ready(function(){
var wsUri = "ws://host:port/daemon.php";
websocket = new WebSocket(wsUri);
websocket.onopen = function(ev) {
}
websocket.onmessage = function(ev) {
var msg = JSON.parse(ev.data);
switch( msg.action){
case "process_finisihed":{
//doThingsHere
}
break;
}
};
websocket.onerror = function(ev){ console.debug(ev); };
websocket.onclose = function(ev){};
});
</script>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.