2019独角兽企业重金招聘Python工程师标准>>>
安装
composer require "symfony/process:2.7.1"
##描述 process组件是可以开启一个子进程 去执行一个命令 ##例子 use Symfony\Component\Process\Process; $process = new Process('ls -lsa'); $process->run(); // executes after the command finishes if (!$process->isSuccessful()) { throw new \RuntimeException($process->getErrorOutput()); } echo $process->getOutput();
实时输出命令的输出
use Symfony\Component\Process\Process;
$process = new Process('ls -lsa');
$process->run(function ($type, $buffer) {if (Process::ERR === $type) {echo 'ERR > '.$buffer;} else {echo 'OUT > '.$buffer;}
});
异步执行
$process = new Process('ls -lsa');
$process->start(); //在这里开启一个子进程去执行
// ... do other things
//一定要调用wait方法;要不然上面的子进程会成为一个僵尸进程
$process->wait(function ($type, $buffer) {if (Process::ERR === $type) {echo 'ERR > '.$buffer;} else {echo 'OUT > '.$buffer;}
});
停止进程 $process->stop(3, SIGINT);
设置超时时间 $process->setTimeout(3600);
发送一个信号(windows系统无效) $process->signal(SIGKILL);
设置闲置超时(即命令没有输出) $process->setIdleTimeout(60);命令60s没有输出东西就会超时
如果超时会抛出 RuntimeException 异常
##未明白的问题
在文档中有一个ProcessBuilder类用来创建一个跨平台命令;但是有点不理解官方的给的例子
use Symfony\Component\Process\ProcessBuilder;$builder = new ProcessBuilder();
$builder->setPrefix('/usr/bin/tar');// '/usr/bin/tar' '--list' '--file=archive.tar.gz' 就是不明白为什么会输出这样的字符串;
echo $builder->setArguments(array('--list', '--file=archive.tar.gz'))->getProcess()->getCommandLine();// '/usr/bin/tar' '-xzf' 'archive.tar.gz'
echo $builder->setArguments(array('-xzf', 'archive.tar.gz'))->getProcess()->getCommandLine();