You can NOT rely on pid+1.
You could prefix exec to the command string, this will replace the /bin/sh script with the real thing you want to exec (use only if you don't do 'scary things' like pipes, output redirection, multiple commands, however if you know how they work, go ahead).
If you prefix exec, the /bin/sh process will only start your process, and the PID will be the same.
Description
array proc_get_status
( resource $process
)
proc_get_status() fetches data about a process opened using proc_open().
Return Values
An array of collected information on success, and FALSE on failure. The returned array contains the following elements:
| element | type | description |
|---|---|---|
| command | string | The command string that was passed to proc_open(). |
| pid | int | process id |
| running | bool | TRUE if the process is still running, FALSE if it has terminated. |
| signaled | bool | TRUE if the child process has been terminated by an uncaught signal. Always set to FALSE on Windows. |
| stopped | bool | TRUE if the child process has been stopped by a signal. Always set to FALSE on Windows. |
| exitcode | int | The exit code returned by the process (which is only meaningful if running is FALSE). Only first call of this function return real value, next calls return -1. |
| termsig | int | The number of the signal that caused the child process to terminate its execution (only meaningful if signaled is TRUE). |
| stopsig | int | The number of the signal that caused the child process to stop its execution (only meaningful if stopped is TRUE). |
proc_get_status
strrev xc.noxeh@ellij
05-Jun-2008 01:12
05-Jun-2008 01:12
damien at cyg dot net
13-Jun-2007 06:06
13-Jun-2007 06:06
Alternatively, if you're calling a subsequent php script using proc_open, you can have that process echo its own actual PID in the output.
Also, if you go through the /proc filesystem on linux, you can read through /proc/12345 where 12345 is the pid returned by proc_get_status (the pid of the /bin/sh instance) and it will list its child processes within.
andy dot shellam at mailnetwork dot co dot uk
05-Apr-2007 05:16
05-Apr-2007 05:16
Further to my previous note, I've found out the PID returned is the PID of the shell (/bin/sh) that then runs the actual command requested.
I've raised this as bug #41003.
andy dot shellam at mailnetwork dot co dot uk
05-Apr-2007 04:58
05-Apr-2007 04:58
To the poster above, same here on FreeBSD 6.1, PHP 5.2.1.
To get the correct PID to use for posix_kill I have to add 1 to the PID returned from proc_get_status.
