2017-04-10 4 views
1

int uv_process_kill(uv_process_t* handle, int signum)libuv - `uv_kill`と` uv_process_kill`の違いは何ですか?

所与のプロセスハンドルに指定された信号を送信します。 uv_signal_tのドキュメントを参照してください。シグナルハンドルについては、特にWindowsでシグナルハンドリングを参照してください。

int uv_kill(int pid, int signum)

所定のPIDを指定信号を送信します。 uv_signal_tのドキュメントを参照してください。シグナルハンドルについては、特にWindowsでシグナルハンドリングを参照してください。

まったく同じことを行うには、次の2つの方法がありますか、ライブラリ内の機構はどういうわけか違いますか?私は、私のUVループが(何らかの理由で)実行に失敗した可能性があるエラー状態を処理する必要がありますが、私は既に起動するすべてのプロセスに対してuv_spawnを呼び出しました。

私の目標は、子プロセスに割り当てられたリソースをクリーンアップすることです。uvループが実行中であるか、停止中であるか、エラー状態であるかどうかを知る必要はありません。

答えて

1

uv_process_killおよびuv_killは、同じ動作を実行しますが、インターフェイスのためにお互いに異なります。前者はuv_process_tハンドルを受け取り、後者はpidを明示的に要求します(両方ともシグナル番号である2番目の引数を持ちます)。
構造体uv_process_tuv_process_killと一緒に使用できる)にpidというフィールドがあり(uv_killと一緒に使用できる)、2つの関数が冗長であると主張できます。
とにかく、殺されるプロセスのPID があるため、外部ソースの手に来ることができました(例として、ユーザーがコマンドラインを通してそれを提供できる - キルツールは、Linux上でどのように機能するかで考えます) 。したがって、pidがある場合は常にuv_process_tのインスタンスがあるという保証はなく、2つの機能がわずかに異なる目的を果たすことは言うまでもないことです。

uv_kill(proc.pid); 

とにかくこの作品libuv方法ではありません、あなたは今まであなたがそれらを持っているときuv_*データ構造を受け入れる機能を使用する必要があります。
もちろん、あなたがようuv_process_tのインスタンスを持っているとき、あなたはまだuv_killを使用することができます彼らはすべてを正しく裂く方法を知っているからです。

要約すると、プロセスのライフサイクル全体を担当しているときに、より多くのlibuv指向の機能を使用すると考えられます(スポーンし、必要に応じて強制終了します)。一方、uv_killは、pidを知っているが、正しく初期化されていないプロセスであるuv_process_tを処理する場合に使用する、より汎用的な目的の関数です。

0

ソース(hereおよびhere)を見てください。 uv_process_killuv_killは同じことを行います。

+0

「メンバーuv_process_t.pidがタイプuv_process_tにあります。」と、ソースへのリンクも表示されます(あなたの答えに参照してください)。チェックマークを付けます。 – Zak

関連する問題