Laravel中的开闭过程
在web.php中,我按照以下路线启动流程Laravel中的开闭过程,laravel,proc-open,Laravel,Proc Open,在web.php中,我按照以下路线启动流程 Route::get('/startProcess',function(){ $descriptorspec=....... $process1 = proc_open('php C:\Process1.php',$descriptorspec,$pipes); // Here I need to save a reference to the process - $process1 }); 我需要在另一条路线上关闭此流程 Rou
Route::get('/startProcess',function(){
$descriptorspec=.......
$process1 = proc_open('php C:\Process1.php',$descriptorspec,$pipes);
// Here I need to save a reference to the process - $process1
});
我需要在另一条路线上关闭此流程
Route::get('/stopProcess',function(){
// Here I need to get a reference to the process - $process1
proc_close( $process1 )
});
在哪里保存对流程的引用以及如何获取它?
proc\u open
返回一个资源,并且资源无法序列化,因此我认为在请求结束后您无法再次检索资源
以下是一个潜在的解决方案:
Route::get('/startProcess',function(){
$descriptorspec=.......
$process1 = proc_open('php C:\Process1.php',$descriptorspec,$pipes);
$status = proc_get_status ($process1);
return response()->json([
'pid' => $status['pid'];
]);
});
然后,您可以使用检索到的PID使用shell操作终止进程:
Route::get('/stopProcess/{pid}',function($pid){
shell_exec("kill -9 $pid");
});
您可以稍后调用
https://example.com/stopProcess/12345
即使在proc\u open和proc\u get\u status之后的下一行调用shell\u exec,shell\u exec也不工作,这在Linux中是吗?这在Windows 10中在Windows 10上,您可以尝试shell\u exec(“taskkill/F/PID$PID”)代码>shell_exec(“kill-9$pid”);同样有效。它前面应该有以下行$descriptors=array(0=>array(“pipe”,“r”),1=>array(“pipe”,“w”),2=>array(“pipe”,“w”);fclose($pipes[0])…fclose($pipes[2])谢谢!