70

Process.Close()プロセスを開始し、このプロセスを終了したい場合、との違いは何Process.Kill()ですか?

を使用してコマンド ライン経由で Wi​​reshark を使用してパケットのキャプチャを開始するアプリケーションがあるため、質問しましたWindows = hidden。そのため、キャプチャを停止したい場合はプロセスを強制終了します。最後のパケットが途中で切断されたというエラーでキャプチャが開くことがあるので、close()前に使用してkill()この問題を解決できるのではないかと思いますか?

キャプチャを開始したら、 Ctrl + C を押して閉じることができますが、私の場合、ウィンドウを非表示の状態で開きます。コードを介して同様のことを行うことはできますか?

4

5 に答える 5

71

Process.Close()とはどう違いprocess.Kill()ますか?

マニュアルはそれについてかなり明確です:

Process.Close():

Close メソッドは、プロセスが待機していた場合に終了の待機を停止し、プロセス ハンドルを閉じ、プロセス固有のプロパティをクリアします。外部から参照されている場合、Close は標準出力、入力、およびエラー リーダーとライターを閉じません。[つまり、プロセス自体は実行され続けます。インスタンスを使用してプロセスを制御できなくなりProcessます]

Process.Kill():

Kill はプロセスの終了を強制しますが、CloseMainWindow は終了を要求するだけです。[...] CloseMainWindow を呼び出してプロセスを終了する要求は、アプリケーションを強制終了しません。アプリケーションは、終了する前にユーザーの確認を求めるか、終了を拒否することができます。アプリケーションを強制終了するには、Kill メソッドを使用します。CloseMainWindow の動作は、ユーザーがシステム メニューを使用してアプリケーションのメイン ウィンドウを閉じる動作と同じです。したがって、メイン ウィンドウを閉じてプロセスを終了する要求によって、アプリケーションがすぐに終了することはありません。

Process.CloseMainWindow:

閉じるメッセージをメイン ウィンドウに送信して、ユーザー インターフェイスを持つプロセスを閉じます。


あなたの編集に関して:

Windows = hidden のコマンドラインからコマンドでwiresharkを使用してパケットのキャプチャを開始するアプリケーションがあるため、私は尋ねました。

Wireshark ではなく、WinPcap APIまたはPcap.Net ライブラリを使用してください。

于 2012-12-19T12:50:06.933 に答える
16

Kill(Windows TerminateProcessシステム コールへの呼び出しを介して)プロセスを突然終了するようにシステムに要求します。これは、タスク マネージャーのプロセスの終了に似ています。

Closeは、.NET のプロセスへのハンドルを閉じますが、実際にはプロセス自体には触れません。Closeによっても呼び出されDisposeます。Jon Skeet によるこの回答を参照してください。

3 番目のオプションはCloseMainWindow です。これ、プライマリ ウィンドウを閉じるように要求して、プログラムを正常にシャットダウンします。これは、タスク バーでプログラムを右クリックして [閉じる] を選択するのと似ています。

于 2012-12-19T12:41:23.910 に答える
7

Kill と Close は 2 つのオプションではありません。プロセスを終了するには、Kill (または CloseMainWindow) を呼び出す必要があります。Close を呼び出すと、リソースが解放されるだけで、標準ストリームは閉じられません。自分でストリームを閉じると、プロセスが終了する場合と終了しない場合があります。プロセスによって異なります。最善の方法は、プロセスの種類に応じて Kill または CloseMainWindow を呼び出してから、Process オブジェクトを Dispose することです。

Closeは、Process オブジェクトのクローズを開始します。Dispose によって呼び出されます。Close は通常、Process オブジェクトのリソースを管理するために使用されます。

Killはプロセスを終了します。これは、ユーザー インターフェイスを持たないプロセスを終了する唯一の方法です。

CloseMainWindowは、クローズ メッセージをプロセスのメイン ウィンドウに送信します。これは、ユーザー インターフェイスを持つプロセスを適切に停止する方法です。

于 2012-12-19T12:50:48.473 に答える
2

Process.Kill は TerminateProcess を呼び出します。

Process.Close は、あなたが思っていることをしません! クラスのインスタンスによって使用されるリソースを解放するだけです。これを読んでください: http://msdn.microsoft.com/en-us/library/system.diagnostics.process.close.aspx

于 2012-12-19T12:42:00.080 に答える