pcntl_exec如何使用ENV参数呢?

pcntl_exec 用法

在PHP手册中可以了解到pcntl_exec的用法,但是对于最后一个选填参数ENV的用法没有DEMO。寻求网上资料无果,所以想请教一下大家有没有用过?

使用目的

execshell_exec都是生成一个新的子进程然后执行命令,pcntl_exec是在当前进程下执行命令。因为我在多进程下想要管理生成的子进程,所以选用的是pcntl_exec。实际想实现的是:

cd /path/to/workdir && /usr/bin/php xxx.php

当然通过下面的写法肯定是可以执行的:

$args = ['/path/to/workdir/xxx.php'];
pcntl_exec('/usr/bin/php', $args);

但是如果我想有没有可能使用ENV参数达到目的。然而对ENV参数的了解又不够。如果有人知道ENV参数的使用方法,希望不吝赐教,非常感谢!

最佳答案

proc_open:可以指定当前命令执行时的工作环境问题,但是不是从父进程的环境下新起的子进程。这点和pcntl_exec不同。pcntl_exec是在当前父进程下新生成子进程。无法两种功能结合吗?

顶在最上面,希望看到的过客给个自己的看法!

3年前 评论
讨论数量: 4
JaguarJack

如果是全局的 env,好像是可以获取解析器的

3年前 评论
so_easy (楼主) 3年前
JaguarJack (作者) 3年前
so_easy (楼主) 3年前

@JaguarJack

// print_r($_ENV); // 输出是空的数组

putenv('CWD=/path/to/workdir' );
echo getenv('CWD');  //输出 /path/to/workdir

// print_r($_ENV); // 输出是空的数组
// print_r(phpinfo()); //也不会受到putenv的影响

// 可是最后的$env参数应该怎么传入呢?等于$_ENV是不行的,但是putenv之后的值又不知道如何获取。
pcntl_exec('/usr/bin/php', $args, $env);
3年前 评论
JaguarJack

@easyer 我觉得 pcntl_exec 的 env 参数是这个意思。

pcntl_exec('/usr/bin/php', $args,  [
'pwd' => '/workdir'
]);

pcntl_exec 进程内可以通过 getenv('pwd') 获取。 对你的要实现的似乎没有作用

3年前 评论
so_easy (楼主) 3年前

proc_open:可以指定当前命令执行时的工作环境问题,但是不是从父进程的环境下新起的子进程。这点和pcntl_exec不同。pcntl_exec是在当前父进程下新生成子进程。无法两种功能结合吗?

顶在最上面,希望看到的过客给个自己的看法!

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!