Process.Startメソッドでプロセスを起動した場合、起動した時点で処理が戻ります。 起動したプロセスの終了を待機する場合は、Process.WaitForExitメソッドまたはProcess.WaitForExitAsyncメソッドを使います。
Process.Startメソッドは起動したプロセスをProcessインスタンスとして返すので、このインスタンスに対してWaitForExitメソッドを呼び出すことにより、起動したプロセスの終了を待機することができます。 また、ExitCodeプロパティを参照すれば終了ステータスを取得することもできます。
WaitForExitメソッドではタイムアウト時間をミリ秒単位で指定することもできます。 タイムアウトまでにプロセスが終了したかどうかは戻り値によって知ることができます。
Process.WaitForExitメソッドでタイムアウト時間を指定して子プロセスの終了を待機する
using System;
using System.Diagnostics;
class Sample {
static void Main()
{
// 子プロセスchild.exeを起動する
using (var p = Process.Start("child.exe")) {
for (;;) {
// 起動した子プロセスの終了を待機する
// (1秒=1000ミリ秒でタイムアウトする)
if (p.WaitForExit(1000)) {
Console.WriteLine("プロセスが終了しました");
// 待機を終了する
break;
}
else {
// 待機がタイムアウトした
Console.WriteLine("プロセスは処理中です");
// 待機を継続する
}
}
}
}
}
起動したプロセスを即座に終了させたい場合は、Process.Killメソッドを使うことができます。