来自firebreath npapi插件的fork()问题

时间:2012-03-08 17:05:22

标签: linux fork npapi firebreath

我正在尝试fork()一个新进程,以便我可以调用一个单独的控制台应用程序。

fork确实运行正常,我得到一个新的进程ID,但进程处于休眠状态,即使浏览器退出也不会激活。

我刚刚接受了示例插件项目并修改了echo方法来执行fork。

常规控制台应用程序可以正常使用fork代码。

firebreath插件应用程序是否需要考虑不同的内容?

有人可以提出可能存在的问题吗?

该平台是archlinux 64位。

FB::variant PluginTestVZAPI::echo(const FB::variant& msg)
{
    static int n(0);
    fire_echo("So far, you clicked this many times: ", n++);

    // fork
    pid_t pid = fork();
    if(pid == 0) // Child
    {
        m_host->htmlLog("child process");
    }
    else if (pid < 0) // Failed to fork
    {
        m_host->htmlLog("Failed to fork");
        m_host->htmlLog(boost::lexical_cast<std::string>(pid));
    }
    else // Parent
    {
        m_host->htmlLog("Parent process");
    }
    m_host->htmlLog("Child Process PID = " + boost::lexical_cast<std::string>(pid));
    // end fork

    // return "foobar";
    return msg;
}

1 个答案:

答案 0 :(得分:1)

我无法确定,但如果我是你,我会尝试删除htmlLog调用 - 你无法从子进程访问DOM,所以htmlLog根本不会工作,它是很有可能尝试在分叉进程中使用它会导致它在尝试(不成功)与不知道它的浏览器进程通信时进入非活动状态。

我不确定这是否可以起作用,但是对于一个已经是其他事物的子过程的过程,我会有点紧张;浏览器拥有插件进程并通过IPC与它进行通信,因此如果您分叉该进程,可能会有很多代码,您不知道还在运行并尝试通过现已不存在的IPC连接与浏览器通信。

我的建议是启动一个单独的过程,但那只是我。至少,您绝对不能使用FireBreath提供的任何内容与子进程中的浏览器进行通信。