如何在子进程终止之前停止主PHP脚本?

时间:2014-01-30 05:33:35

标签: php

我是PHP的新手。

我正在尝试编写一个PHP脚本,它将获取源代码(比如“test.c”),它将编译代码并运行该代码。运行可执行文件(“test.c - > test”) ),它将从其他文件中获取输入并将输出提供给其他文件。然后我将从输出文件中读取。

我编译了(“gcc -g test.c -o test”)并通过在PHP中使用“proc_open()”创建进程来运行(“./ test”)文件。早先我遇到了一个问题,我的主要PHP脚本在没有等待子进程终止的情况下运行(将创建一个可执行文件,我希望主PHP只有在创建可执行文件时才能进一步运行。)。正如我所说,我想等待主PHP脚本,直到子进程终止,所以我在谷歌搜索并找到使用“pcntl_wait()”的解决方案,但现在的问题是,当我使用“pcntl_wait()”,脚本后面的“pcntl_wait( )“没有运行。我无法弄清楚问题。

现在我的问题是,是否有任何方法可以让主要的PHP脚本在孩子进程终止之前等待?

如果有人有兴趣看我如何使用“pcntl_wait()”那么我会感谢她/他。这是我的代码的一部分:

         $cwd = "/code/";

chmod("/code/test.c",0777);

switch($xtension)
{
    case "c"    :   $cmd = "gcc -g test.c -o test -lm ";
                break;
    case "cpp"  :   $cmd = "g++ -g test.cpp -o test";
                break;
    case "java" :   $cmd = "javac test.java";
}



$descriptors = array(
    2 => array("pipe","w")
);


$process = proc_open($cmd,$descriptors,$pipes,$code);



if(is_resource($process))
{
    $status = proc_get_status($process);
    $pid = $status ["pid"];

    echo getmypid()."<br />";


    echo $pid;

    if(pcntl_waitpid($pid,$child_status) == -1)
    {
        fclose($pipes[2]);

        proc_close($process);
        exit("Sorry!Unable to compile the source_file.\n");


    }
       **/*AFTER IT NOTHING IS RUNNING*/**      


    while(!file_exists("/code/test"))
    {

        proc_close($process);
       echo stream_get_contents($pipes[2]),"\n";
       fclose($pipes[2]);                   

        exit("Sorry!Unable to compile the source_file.\n");
    }

    echo "Compiled Successfully!\n";
    echo "Running test cases...\n";

    fclose($pipes[2]);

    proc_close($process);

}
else
{
    exit("Sorry!Unable to compile the source_file.\n");
}

0 个答案:

没有答案