swoole进程中执行shell命令

2021-10-02

执行成功后,当前进程的代码段将会被新程序替换。子进程蜕变成另外一套程序。父进程与当前进程仍然是父子进程关系。

use Swoole\Process;

$process = new Process(function ($worker){
    $worker->exec('/usr/bin/php', [__DIR__.'/5.php']);
});

$process->start();

由于exec系统调用会使用指定的程序覆盖当前程序,子进程需要读写标准输出才能与父进程进行通信;

use Swoole\Process;
use function Swoole\Coroutine\run;

$process = new Process(function (Process $worker) {
    /*第一个参数:可执行文件的绝对路径
     *第二个参数:要执行文件和文件传参的数组
     */
    $worker->exec('/bin/echo', ['hello']);
}, true); // 需要启用标准输入输出重定向

$process->start();

run(function() use($process) {
    $socket = $process->exportSocket();
    echo "from exec: " . $socket->recv() . "\n";
});

执行shell命令

$process = new Process(function (Process $worker) {
    $worker->exec('/bin/sh', array('-c', "cp -rf /data/test/* /tmp/test/"));
});

$process->start();

 

{/if}