symfony2 Process 组件的学习笔记

安装

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();

转载于:https://my.oschina.net/u/729139/blog/469078

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值