我使用PHP來啓動FFMPEG轉碼命令。這是一個在Ubuntu 10.04 Server上運行的典型LAMP設置,沒有什麼特別的配置。PHP執行返回不正確的進程ID
我遇到的問題是當我運行PHP Exec命令時,它返回不正確的進程ID。而不是返回適當的PID,而是返回2以上的一個。即FFMPEG進程ID將是3557,但是PHP Exec返回3559.
我一直設法每次生成這個。問題是,我真的需要正確的進程ID,所以如果我選擇,我可以稍後停止進程。
ffmpeg的命令的工作,並開始不會有問題,所以我不認爲這是問題的根源:
$cmd = "ffmpeg -r 4 -f mjpeg -an -i 'http://" . $internalhost . ":" . $stream_port . "'
-vcodec libx264 -vpre fastfirstpass -vpre baseline -b 24k -bt 32k -threads 0
http://localhost:8090/" . $localport . ".ffm";
$ffmpg = new Process($cmd);
我知道...這是很醜陋,但它的工作原理和我不我認爲變量很重要。
要啓動我使用從PHP手冊網站,該網站是如下一類代碼:
class Process
{
private $pid;
private $command;
public function __construct($cl=false){
if ($cl != false){
$this->command = $cl;
$this->runCom();
}
}
private function runCom(){
$command = 'nohup '.$this->command.' > /dev/null 2> /dev/null & echo $!';
exec($command ,$op);
$this->pid = (int)$op[0];
}
public function setPid($pid){
$this->pid = $pid;
}
public function getPid(){
return $this->pid;
}
public function status(){
$command = 'ps -p '.$this->pid;
exec($command,$op);
if (!isset($op[1]))return false;
else return true;
}
public function start(){
if ($this->command != '')$this->runCom();
else return true;
}
public function stop(){
$command = 'kill '.$this->pid;
exec($command);
if ($this->status() == false)return true;
else return false;
}
}
我猜的情況是,由於某種原因FFMPEG被踢了另外2個工藝和替代返回主進程的PID,它返回最後一個進程的PID。
雖然可能是錯誤的,但我仍然撓撓我的腦袋。
編輯使用內聯代碼標記http://stackoverflow.com/editing-help#code – 2013-02-03 20:29:13