pcntl_exec

(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)

pcntl_exec在当前进程空间中执行指定的程序

描述

pcntl_exec(string $path, array $args = [], array $env_vars = []): bool

使用给定的参数执行程序。

参数

path

path 必须是二进制可执行文件的路径或带有有效路径的脚本,该路径指向 shebang (例如 #!/usr/local/bin/perl) 中的可执行文件作为第一行。有关更多信息,请参阅您系统的 man execve(2) 页面。

args

args 是传递给程序的字符串参数数组。

env_vars

env_vars 是一个字符串数组,作为环境传递给程序。该数组的格式为 name => value,其中键是环境变量的名称,值是该变量的值。

返回值

返回 false

添加说明

用户贡献说明 3 条说明

12
eric kilfoil
17 年前
pcntl_exec() 函数的工作原理与标准 (unix 风格) exec() 函数完全相同。它与常规 PHP exec() 函数的不同之处在于,调用 pcntl_exec() 的进程被调用进程替换。这是创建子进程的理想方法。在一个简单的示例 (不进行错误检查) 中

switch (pcntl_fork()) {
case 0
$cmd = "/path/to/command";
$args = array("arg1", "arg2");
pcntl_exec($cmd, $args);
// 子进程只有在 exec 失败时才会到达这里,
// 因为执行会转移到 pcntl_exec()ed 命令
exit(0);
default
break;
}

// 父进程继续
echo "I am the parent";

--

由于这不是通过 shell 执行的,因此您必须提供从文件系统根目录开始的完整路径。有关更多信息,请查看 execve() 手册页。
10
agodong at verizon dot net
17 年前
有些人可能发现以相同进程的身份,以不同用户运行其他程序很有用。如果脚本正在 root 权限下运行,这非常有用。以下是在 *nix PHP CLI 下实现此功能的简单代码

#!/usr/bin/php -q
<?php
// 在下面输入要以其身份运行的用户 (调用脚本时需要传递的参数),否则它将以调用者用户的身份运行进程。

$username = $_SERVER['argv'][1];

$user = posix_getpwnam($username);
posix_setuid($user['uid']);
posix_setgid($user['gid']);
pcntl_exec('/path/to/cmd');
?>

我将其用作套接字程序的一部分,以便可以从远程位置以不同用户的身份运行程序。
3
rbemrose at vgmusic dot com
16 年前
作为旁注,如果我正确地理解了下面的评论,那么如果您使用的是 PHP Web 服务器模块,则不应运行此操作,因为它会用您要告诉它运行的任何进程替换 Web 服务器的进程。
To Top