Как завершить процесс

Я создаю процесс с использованием proc_open в одном скрипте PHP.

Как это прекратить в другом скрипте. Я не могу передать ресурс, возвращенный proc_open.

Я также пытался использовать proc_get_status (), он возвращает ppid. Я не получаю pid детей.

разработка env: WAMP

Любые входы оцениваются.

Я рекомендую вам пересмотреть свою модель, чтобы убедиться, что вам действительно нужно убить процесс из другого места. Ваш код будет все труднее отлаживать и поддерживать во всех, кроме самых тривиальных обстоятельствах.

Чтобы он был инкапсулирован, вы можете сигнализировать процесс, который вы хотите завершить и изящно выйти в процессе, который хотите убить. В противном случае вы можете использовать обычный IPC для отправки сообщения, которое говорит: «Эй, приятель, выключи, пожалуйста».

edit: для второго абзаца вы все равно можете запустить сценарий для этого. хорошо. то, чего вы хотите избежать, это вещь типа kill -9. вместо этого пусть процесс выходит изящно.

Для этого в чистом PHP, вот решение:

posix_kill($pid, 15); // SIGTERM = 15 

Вы можете использовать некоторый метод для создания процесса, этот метод обычно возвращает PID нового процесса.

Это работает для вас? :

 $process = proc_open('php', $descriptorspec, $pipes, $cwd, $env); $return_value = proc_close($process); 

Лучше всего использовать что-то подобное для запуска другого процесса:

 $pid = shell_exec("nohup $Command > /dev/null 2>&1 & echo $!"); 

Что бы выполнить этот процесс и дать вам идентификатор текущего процесса.

 exec("ps $pid", $pState); $running = (count($pState) >= 2); 

вы можете всегда использовать

 exec("kill $pid"); 

Тем не менее, вы не можете убить процессы, не принадлежащие пользователю, на котором работает PHP – если он работает как никто, – вы начнете новый процесс как никто, и сможете только убивать процессы, запущенные под пользователем никого.