私は別のコンソールアプリケーションを呼び出すことができるように新しいプロセスをfork()しようとしています。firebreath npapiプラグインからfork()を発行する
フォークが正常に実行され、新しいプロセスIDが取得されますが、プロセスはスリープ状態にあり、ブラウザが終了してもアクティブにならない。
私はちょうどサンプルプラグインプロジェクトを取って、フォークを行うようにエコーメソッドを変更しました。
通常のコンソールアプリケーションは、フォークコードで正常に動作します。
firebreathプラグインアプリで考慮しなければならないことがありますか?
誰かが問題の原因を示唆することはできますか?
プラットフォームはarchlinux 64ビットです。そこには、子プロセスからのDOMにアクセスするための方法はありませんので、htmlLogがで動作しません - 私は特定することはできませんが、私があなただったら、私はhtmlLog呼び出しを削除してみたい
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;
}
あなたが所有していないプロセスをフォークしないでください。私はそれがすぐにクラッシュしないことに驚いています。あなたのコードは、ブラウザまたはプラグインのプロセスのゲストにすぎません。 –
stackoverflowで検索し、一般的に新しいプロセスを起動するメソッドはforkを使用しているようです。フォークを使用せずにプロセスを起動する方法は何ですか? – csaket