我不得不执行类似的任务,但我有一个稍微不同的方法,非常类似于你正在尝试做的,我通过socket去:
第一步:获取进程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");
第2步:守护程序文件
的daemon.php应该打开,在如果PR间隔检查一个Socket给定的PID仍然在运行,如果没有,发送消息并退出过程。我没有发布套接字的东西,因为我认为有很好的库,而我的方法是手工制作的,所以很难理解。
3:在需要的地方
过程套接字消息也许你想这样做,在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>
我不知道你想做的事完全是,异步是什么? 我想你应该看看线程并行执行任务。 – Fky