Я создаю процесс с использованием 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 – если он работает как никто, – вы начнете новый процесс как никто, и сможете только убивать процессы, запущенные под пользователем никого.