0

私は外部実行可能ファイル(私の場合はffmpeg)を呼び出す小さな部分に取り組んできました。次に、テストを作成し、デバッグモードでテストランナーを使用しました。デバッグを停止(終了)しても、ffmpegが実行されます。ファイナライザーでプロセスを強制終了しようとしましたが、IDisposableを使用しました-それでも実行されます。プロセスがそのように残されないようにするにはどうすればよいですか。呼び出し元が死亡したり、失敗したり、何らかの方法で停止したりした場合、ffmpeg実行可能ファイルは強制終了されます。

私はいつものようにプロセスを実行します(特別なことは何もありません)

var processInfo = new ProcessStartInfo(ffmpegPath)
{
    UseShellExecute = false,
    Arguments = arguments,
    RedirectStandardOutput = true,
    RedirectStandardError = true,
    CreateNoWindow = true,
};

using (var ffmpegProc = new Process())
{
    ffmpegProc.EnableRaisingEvents = true;
    ffmpegProc.StartInfo = processInfo;
    ffmpegProc.Start();
    ffmpegProc.WaitForExit();
}
4

2 に答える 2

1

プロセスが終了したときにできることは何もありません。誰かがTerminateProcess呼び出しでプロセスを強制終了した後、プロセスで実行されるコードはありません。

より適切な場合(つまり、未処理の例外)には、必要な処理に近い処理を実行するグ​​ローバルハンドラーがある場合があります。

于 2013-03-04T16:50:23.463 に答える
1

JobObjectを使用する必要があります

JobObjectを使用すると、子プロセスを追加できます。したがって、メインプロセスが強制終了または閉じられた場合、OSはすべての子プロセスを終了します。

ソース:http ://www.xtremevbtalk.com/showpost.php?p = 1335552&postcount = 22

別の解決策は、親PIDを子オブジェクトに渡すことです。

すべての子供は親PIDの存在を確認する必要があり、見つからない場合は自分自身を殺します

于 2013-03-04T16:52:24.007 に答える