В основном у меня есть модуль CGI, написанный на C, и я хочу отделить полностью независимый процесс PHP. Процесс PHP не имеет никакого отношения к CGI, кроме того, что последний передает параметр первому через командную строку. Когда происходит отсоединение, два процесса не имеют ничего общего друг с другом и завершают асинхронно. Оба доступа к базе данных независимо и выполняют несвязанные функции. Первоначальный процесс не ждет отсоединенного процесса и не заботится о том, закончится ли он, успешна или нет. Оба процесса завершаются после выполнения своих конкретных функций. Отключенный процесс явно устанавливает пути к файлам, поэтому каталог исходного кода по умолчанию не имеет значения.Как отделить независимый процесс PHP от процесса CGI Apache в C?
ответ
Предположим, что для запуска команды является «php.exe arg1 arg2».
В Windows вы можете использовать функцию CreateProcess, чтобы создать отдельно стоящий процесс в вас CGI:
STARTUPINFO si;
PROCESS_INFORMATION pi;
memset(&si, 0, sizeof(si));
si.cb = sizeof(si);
if (!CreateProcess(NULL, // name of executable module
"php.exe ag1 arg2", // command line string
NULL, // SD
NULL, // SD
FALSE, // handle inheritance option
CREATE_NEW_CONSOLE, // creation flags
NULL, // new environment block
NULL, // current directory name
&si, // startup information
&pi // process information))
{
logError();
}
Под Linux или других Unix подобных ОС, вы можете использовать функцию вилку в координации с execvp:
int pid = fork();
if (pid < 0)
{
logError();
}
else if (pid == 0) // Child Process
{
char *args[] = { "php.exe", "arg1, "arg2", NULL };
exevp(args[0], args);
logError(); // should never reach this line
}
Спасибо за ответ. Однако код Linux не работает так, как есть. После экспериментов я обнаружил, что это не сработает, пока я не удалю «.exe». Это должно быть просто «php». Кроме того, первым параметром должен быть файл php для запуска. После этого следуют параметры этого модуля php. Поэтому работающими параметрами были char * args [] = {"php", "/var/www/html/mail_new_cc_invoices.php", sales_id, NULL}; Твой ответ был достаточно, чтобы заставить меня идти. Я знал, какие функции использовать, и документация сообщила мне, куда идти оттуда. – user157426
Извините, что воскресил этот два с половиной года спустя, но у меня возникают трудности с другим отдельным процессом. Он не кажется действительно независимым. Когда он работает, индикатор «занят» продолжает отображаться на экране. И иногда отдельный процесс не заканчивается, без видимых причин. Я подозреваю, что пользователь перешел на другой экран и убил его. – user157426
- 1. Запуск процесса php-cgi
- 2. Независимый процесс в php
- 3. Начать независимый процесс от NodeJs
- 4. Обработка процесса в cgi
- 5. Создайте новый независимый процесс из другого процесса C
- 6. Отделить отладчик (неизвестно) от процесса?
- 7. Как сделать по-настоящему независимый процесс в WPF C#
- 8. Как отделить раздвоенный процесс от родителя в C
- 9. blenc_encrypt - сбой процесса php-cgi
- 10. запустить полностью независимый процесс
- 11. Как создать новый независимый процесс в python
- 12. создать независимый скрытый процесс
- 13. Создать независимый процесс в C++ (Windows)
- 14. Создайте независимый процесс в Linux
- 15. открытый независимый процесс python
- 16. Как отделить пакет услуг от Apache OFBiz?
- 17. Как отделить процесс от CGI, чтобы я мог хранить и читать файлы из памяти?
- 18. дочерних процессов отделить от основного процесса Баша PHP оболочки
- 19. Запуск CGI CGI Script в качестве фонового процесса?
- 20. PHP: Как запустить процесс отдельно от основного процесса
- 21. Как настроить apache для C++ CGI-скриптов?
- 22. Запустите простую задачу C как Apache CGI
- 23. Как запустить процесс от процесса TFS2015 сборки
- 24. как извлечь процесс от процесса питон пула
- 25. Создайте новый независимый процесс в node.js
- 26. Отделить все значения от Iterable, Apache Spark
- 27. Как создать долговременный PHP-процесс в Apache?
- 28. Как выполнить полностью независимое приложение с Java. Как независимый процесс
- 29. Как использовать cgi в Apache htaccess
- 30. Обмен PHP-CGI между Apache и NGINX
Для демонстрации процесса под Linux вам необходимо выполнить fork/exec дважды. – alk