Ich hatte eine ähnliche Aufgabe zu erfüllen, und obwohl ich einen etwas anderen Ansatz hatte, ist ganz ähnlich zu dem, was Sie zu tun versuchen, und ich ging durch Buchsen:
1. Schritt: die Prozess-PID und rufen Socket-Datei
//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. Schritt: der Dämon Datei
die daemon.php sollte einen Sockel öffnen, wenn die pr in Intervallen überprüft Der Prozess mit der angegebenen PID läuft noch und wenn nicht, senden Sie eine Nachricht und beenden Sie den Prozess. Ich habe die Socket-Sachen nicht geposted, weil ich denke, dass es dafür gute Bibliotheken gibt, und meine Herangehensweise war von Hand gemacht, was es schwierig machen kann, sie zu verstehen.
3.: Prozess Socket-Nachrichten benötigt, wo
Wahrscheinlich wollen Sie, dass
<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>
Ich bin nicht sicher, in Javascript zu tun, was Sie genau tun wollen, asynchron? Ich denke, Sie sollten sich Threads ansehen, um Aufgaben parallel auszuführen. – Fky