执行成功后,当前进程的代码段将会被新程序替换。子进程蜕变成另外一套程序。父进程与当前进程仍然是父子进程关系。
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();