proc_open でexitcode を取得すると -1 になる
proc_open の関数で、exitcode を参照すると、常に -1 が固定で返ってくる件
proc_get_status($process)['exitcode']; // -1 proc_get_status($process)['exitcode']; // -1
array:8 [ "command" => "ssh" "pid" => 6694 "running" => false "signaled" => false "stopped" => false "exitcode" => -1 "termsig" => 0 "stopsig" => 0 ]
原因
プロセス終了後に status 取得すると、常に -1 しか返ってこない。そういうものである
対策。
proc_get_status($process)['running']
が false
になった瞬間の status を保存しておくと exitcode が正しく取れる。
終了後に初めて呼び出したときに、正しいexitcode が取れる。それ以降は「終了済み」を示す -1 が常に返ってくる。
<?php$cmd=['ssh','localhost', '/bin/noexists_command']; $process=proc_open($cmd, [2=>$fd_ferr=fopen('php://temp','w')] , $pipes); if(!is_resource($process)){thrownew \Exception("実行エラー");}do{$stat=proc_get_status($process); // waitingusleep(1000*1); }while($stat['running']); if($stat['exitcode']>0){fseek($fd_ferr,0); $err=stream_get_contents($fd_ferr); thrownew \Exception($err); }
これは、気づかんわ。
参考資料
https://stackoverflow.com/questions/7645499/getting-the-real-exit-code-after-proc-open