PHP 8.6.0 Beta 1 is available for testing

pcntl_exec

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

pcntl_execEjecuta el programa indicado en el espacio actual de procesos

Descripción

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

Ejecuta el programa indicado en el espacio actual de procesos.

Parámetros

path

path debe ser la ruta hacia un binario ejecutable o un script con una ruta válida apuntando a un ejecutable en la primera línea (por ejemplo, #!/usr/local/bin/perl). Ver las páginas de ayuda de su sistema concernientes a execve(2) para más información.

args

args es un array de argumentos en forma de strings pasados al programa.

env_vars

env_vars es un array de strings que son pasadas al programa como variables de entorno. El array es de la forma nombre => valor, la clave es el nombre de la variable de entorno y el valor es el valor de esta variable.

Valores devueltos

Devuelve false .

Found A Problem?

Learn How To Improve This PageSubmit a Pull RequestReport a Bug
+add a note

User Contributed Notes 3 notes

up
15
agodong at verizon dot net
19 years ago
Some people might find it useful to run other program using the same process as a different user. This is very usefull if the script is running under root. Here is a simple code to achieve that under *nix PHP CLI:
#!/usr/bin/php -q
<?php
//Enter run-as user below (argument needed to be passed when the script is called), otherwise it will run as the caller user process.
$username = $_SERVER['argv'][1];
$user = posix_getpwnam($username);
posix_setuid($user['uid']);
posix_setgid($user['gid']);
pcntl_exec('/path/to/cmd');
?>

I use this as a part of socket program so that a program can be run under different user from remote location.
up
10
eric kilfoil
19 years ago
The pcntl_exec() function works exactly like the standard (unix-style) exec() function. It differs from the regular PHP exec() function in that the process calling the pcntl_exec() is replaced with the process that gets called. This is the ideal method for creating children. In a simple example (that does no error checking):
switch (pcntl_fork()) {
 case 0:
 $cmd = "/path/to/command";
 $args = array("arg1", "arg2");
 pcntl_exec($cmd, $args);
 // the child will only reach this point on exec failure,
 // because execution shifts to the pcntl_exec()ed command
 exit(0);
 default:
 break;
}
// parent continues
echo "I am the parent";
--
since this is not being executed through a shell, you must provide the exact path from the filesystem root. Look at the execve() man page for more information.
up
1
rbemrose at vgmusic dot com
18 years ago
As a side note, if I'm reading the comments below correctly, you should not run this if you're using a PHP webserver module, as it will replace the webserver's process with whatever process you're telling it to run.
+add a note

AltStyle によって変換されたページ (->オリジナル) /