Re: proc_get_status() not returning correct pid
| From: | Aziz Saleh | Date: | Wed, 02 Aug 2017 19:14:40 +0000 |
| Subject: | Re: proc_get_status() not returning correct pid | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-326143@lists.php.net to get a copy of this message | ||
On Wed, Aug 2, 2017 at 2:52 PM, James Colannino <crankycyclops@gmail.com>
wrote:
> Hi everyone,
>
> It seems proc_get_status() isn't returning the correct pid when I spawn a
> background php process using proc_open (or at least not the pid I'm
> expecting.) I'm calling it like this (I'll ommit the descriptorspec and
> other parameters for brevity's sake):
>
> $this->process = proc_open(
> 'php worker.php',
> $descriptorspec,
> $pipes,
> $cwd,
> $env
> );
>
> Later, if I var_dump the output of proc_get_status($this->process), I'll
> get something like this:
>
> array(8) {
> ["command"]=>
> string(14) "php worker.php"
> ["pid"]=>
> int(24173)
> ["running"]=>
> bool(true)
> ["signaled"]=>
> bool(false)
> ["stopped"]=>
> bool(false)
> ["exitcode"]=>
> int(-1)
> ["termsig"]=>
> int(0)
> ["stopsig"]=>
> int(0)
> }
>
> However, when I check on the system as it's running, I see that the above
> pid doesn't belong to the executing php process, but rather to a process
> with the command "sh -c php worker.php." As a result, when I try to kill
> the process, I still have processes with the command "php worker.php" left
> behind (these are backgrounded consumers that are waiting on input they'll
> never receive.)
>
> This is the output of ps aux | grep php as an example:
>
> user+ 24173 0.0 0.0 4508 764 pts/0 S+ 18:51 0:00 sh -c php
> worker.php
> user+ 24174 0.0 0.7 312180 31544 pts/0 S+ 18:51 0:00 php
> worker.php
>
> After running either proc_terminate($this-process) or
> posix_kill(proc_get_status($this->process)['pid'], SIGKILL), I still have
> the following left behind:
>
> user+ 24174 0.0 0.7 312180 31544 pts/0 S+ 18:51 0:00 php
> worker.php
>
> Only the "sh -c php worker.php" process disappears.
>
> Does anyone have an idea of what's going on and how I can get the pid for
> the correct process so I can kill it from inside PHP?
>
> Thanks!
>
> This is on PHP 7.0.21.
>
Check out the first comment on
http://php.net/manual/en/function.proc-terminate.php.
Seem to have had the
same issue as you, possibly!