Exec-команды SSI/PHP завершаются при отправке ответа, верно?
Скажем, у меня есть скрипт SSI, который использует exec, или скрипт PHP, который использует exec или proc_open, чтобы запустить процесс, когда пользователи отправляют данные из своего браузера на мой сервер. Правильно ли я понимаю, что этот порожденный процесс завершится, когда сервер завершит обработку запроса и отправит ответ обратно на сервер? Использую ли я SSI или PHP, порожденный процесс завершится в этот момент, верно?
И, следовательно, нет способа "поддерживать процесс" между отдельными запросами, поэтому мне нужно написать программу-демон, если я хочу взаимодействовать с тем же процессом при последующих запросах?
1 ответ
На самом деле поддерживать процесс довольно просто, мы делаем это постоянно:
Создайте шеллскрипт (wrapper.sh) как
#!/bin/bash
/path/to/some/process < /dev/zero > "$1" &
echo "Blah"
Мы нашли echo "Blah"
быть необходимым в некоторых системах.
Спавн процесс с wrapper.sh "/path/to/output/file"
, он вернется почти сразу - при более позднем вызове скрипта вы можете прочитать /path/to/output/file
чтобы получить результат.