swoole_async::exec

异步执行Shell命令。相当于shell_exec函数,执行后底层会fork一个子进程,并执行对应的command命令。

function swoole_async::exec(string $command, callable $callback);
  • $command为执行的终端指令,如ls
  • 执行成功后返回子进程的PID
  • 命令执行完毕子进程退出后会回调指定的$callback函数,回调函数接收2个参数,第一个参数为命令执行后的屏幕输出内容$result,第二个参数为进程退出的状态信息$status

注意事项

  • fork创建子进程的操作代价是非常昂贵的,系统无法支撑过大的并发量
  • 使用exec时,请勿使用pcntl_signalswoole_process::signal注册SIGCHLD函数,执行wait操作,否则在命令回调函数中,状态信息$status将为false

此函数在1.9.22或更高版本可用

使用实例

$pid = Swoole\Async::exec("ps aux", function ($result, $status) {
    var_dump(strlen($result), $status);
});
var_dump($pid);

  • cslistener

    请问为什么不像其他几个API那样提供一个 swoole_async_exec 全局函数呢?

  • Rango

    最新的API逐步都只用类风格了。

  • cslistener

    类的静态方法跟全局函数其实差不太多,个人觉得最好还是能够保持统一.

    if (!function_exists('swoole_async_exec')) {
        function swoole_async_exec() {
            return call_user_func_array('swoole_async::exec', func_get_args());
        }
    }
    

  • 落落

    整个文档代码风格能统一一下最好了,PHP7 语法加全命名空间

  • 东风

    给对swoole感兴趣的朋友推荐一个swoole学习群:820469789,群里面每天会讲解swoole项目,还有大牛答疑解惑,学习与快乐同在。我们群是关于swoole学习的,希望大家多多交流。即使是小白也没有关系,只要加入QQ群,就可以获取一些免费的学习资料。