如何从C中的apache CGI进程中分离独立的PHP进程?

时间:2015-02-18 05:48:39

标签: php c apache cgi

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

1 个答案:

答案 0 :(得分:0)

假设要启动的命令是“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
}