1

私が知る限り、APIドキュメントの指示に従いました。options を使用してプロセスを生成し、ChildProcessdetached:true, stdio:['ignore','ignore','ignore']を呼び出します。unrefChildProcess には pid があるので、正常に開始されたと思います。単調なタスク内からイエティ サーバーを起動しようとしています。このコードは非同期呼び出し内にあるためnext、タスクを続行して最終的に終了します。私は、Mac OSX 10.9のyetiスクリプトへの正しいパスをwhich取得するために使用します。ポートも空のポートに定義されます。コマンドラインで同じコマンドを実行すると、問題なく動作します。うなり声が終了した後、ログに記録された pid に対してandおよび grepを呼び出しますが、何も実行されていません。コードは次のとおりです。cmd/usr/local/binps aux | grep nodeps aux

yeti = spawn("" + cmd + " --server --port " + port, [], {
  detached: true,
  stdio: ['ignore', 'ignore', 'ignore']
});
yeti.unref();
next("Yeti server is running. pid: " + yeti.pid);
4

2 に答える 2

4

これを試して:

spawn(cmd, ["--server", "--port", port], {
  detached: true,
  stdio: ['ignore', 'ignore', 'ignore']
});

spawnすべてが最初の引数として渡された例を 1 つも見たことがありません。最初の引数がコマンド名 (つまり、実行可能ファイル名または実行可能ファイルへのパス) のみで、2 番目の引数が文字列の配列である場合に使用されるのを私はいつも見てきました。

pid が表示されたという事実は、Unix タイプのシステムではspawnwillforkexec. 成功するfork可能性があるため、新しい pid が表示されexecますが、実行可能ファイルの名前が OS にとって意味をなさないため失敗します。

于 2013-12-05T17:42:23.283 に答える
0

PM2 を使用しているにもかかわらず、親を強制終了するとプロセスが終了する理由を調査中にこれを見つけた場合: https://github.com/Unitech/pm2/issues/1036

pm2 は kill プロセス ツリーを使用します。これにより、プロセス ツリー全体が強制終了されます。でcliコマンドを実行する--no-treekillと、これが解決されます。

関連も:https://github.com/Unitech/PM2/issues/1564

于 2017-09-08T22:43:53.997 に答える