- ベストアンサー
C#で自己プロセスが消えない状態になる
今製作中のクライアントアプリで困っていることがあります。 既存のプログラムをキックするプログラムなのですが、プロセスのキックを行うとなぜか自分の処理を終わらせてもプロセスが生きている状態に陥ります。 プロセスのスタートは、 Process.Start(・・・・・); で実行しています。 終わらせるときは何をやってもダメです。 this.Close(); などなど・・・ フォームが消えてもまだなおプロセスは生き続けてゾンビ化します。 どなたか教えていただけませんでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
ANo.1 です。 起動したプロセスの終了を待機しているという事ですね。それはForm.Close イベントハンドラでの待機処理でしょうか?そうするとフォームは消えてますね。 Form.Closing イベントハンドラで待機したらどうですかね?プロセスハンドルが無効になったかどうかの確認は適切なコーディングですか? 少なくとも、私がテストアプリで同様の操作をする限り、そういう状況にはなりません。 ProcessStartInfo psi = new ProcessStartInfo(); { String strArgs = "/C wait.bat"; // キー入力待ちさせてます // プロセスのオプション psi.FileName = System.Environment.GetEnvironmentVariable("ComSpec"); psi.Arguments = strArgs; psi.CreateNoWindow = true; psi.RedirectStandardOutput = true; psi.RedirectStandardError = true; psi.UseShellExecute = false; psi.ErrorDialog = false; } Process p = Process.Start(psi); p.WaitForExit(10000);
その他の回答 (1)
Process.Start() で立ち上げたプロセスは、もちろん生き続けますよね。 Process.Start() を呼んでるプロセス(作成中のクライアントアプリ)は、this.Close() の後、ちゃんと終了しますよね? (vhost というのが残るのはアリかもしれません・キャッシュでしょう) もしクライアントアプリがそうでなくゾンビになってるとしたら・・・なんでしょうねぇ。
お礼
ありがとうございます。大変参考になる意見ありがとうございました。
補足
少し語弊がありました。 Process.Start()でキックした奴は監視をしています。 こいつの処理が終わればプロセスが消えるのでプロセスがなくなった所でクライアントアプリのフォームを消してやる処理をしています。 そのフォームが消えても“フォームのプロセス”が生き続けます。
お礼
ありがとうございます。大変参考になる意見ありがとうございました。