如何将独立的PHP进程与C中的apache CGI进程分离


How do I detach an independent PHP process from an apache CGI process in C?

基本上我有一个用C编写的CGI模块,我想分离一个完全独立的PHP进程。PHP进程与CGI没有任何关系,只是后者通过命令行将参数传递给前者。一旦分离发生,这两个过程就不再相互关联,而是异步完成。两者都独立访问数据库并执行不相关的功能。原始进程不等待分离的进程,也不关心它是否完成、是否成功。这两个进程都在执行其特定功能后终止。分离的进程显式地设置文件路径,因此原始进程的默认目录不相关。

假设要启动的命令是"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:协同使用函数fork

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
}