Laravel中的开闭过程

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

在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
});
我需要在另一条路线上关闭此流程

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])谢谢!