2017-12-11 28 views
1

私はシンプルで面白い質問があります。親クラッシュ後のC#子プロセスの動作

C#アプリケーションからプロセス(node.jsサーバー)を起動する必要があります。

アプリケーション内からサーバーを起動する方法を説明するコードが見つかりました。

Process p = new Process(); 
     p.StartInfo.UseShellExecute = false; 
     p.StartInfo.RedirectStandardOutput = true; 
     p.StartInfo.RedirectStandardError = true; 
     p.StartInfo.RedirectStandardInput = true; 
     p.StartInfo.FileName = @"c:\node\node.exe";**//Path to node installed folder**** 
     string argument = "\\ bundle\main.js"; 
     p.StartInfo.Arguments = @argument; 
     p.Start(); 

私の質問は:親プロセス(C#アプリケーション)がクラッシュした場合、このプロセスで起こった何?子プロセスが終了/クラッシュするか、まったく別のプログラムなので実行されますか?

それが稼働し続けた場合

、方法は、親がクラッシュした場合、子が終了を確認すると、「リンク」、これら二つのプロセスがありますか?

答えて

0

は、あなたがあなたのプロセスを終了したい場合は、これはあなたが開始したプロセスを終了します。この機能process.CloseMainWindow();を使用する必要があり、以下のようにのようにコーディングしようとしました。上記のコードで

public static void Main() 
{  
    System.Diagnostics.Process process = new System.Diagnostics.Process(); 
    System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); 
    startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal; 
    startInfo.FileName = "cmd.exe"; 
    process.StartInfo = startInfo; 
    process.Start(); 
    Console.ReadLine(); 
    process.CloseMainWindow(); 
    process.Close(); 
} 

私はcmd.exeを開始し、そのプログラムを終了するために独自のウィンドウIコードCloseMainWindow()機能を有するもの。

Cmdは別のプロセスであるため、起動したプログラムを閉じると閉じることはありません。 ()process.CloseMainWindow(前;)

は、このプロセスは、親がクラッシュした場合に実行し続けるのだろうか?質問への

答えは:Cmdをプロセスは、親が閉じて取得する場合は、上記のコードのメインプログラムで

public static void Main() 
    { 
     System.Diagnostics.Process process = new System.Diagnostics.Process(); 
     System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); 
     startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal; 
     startInfo.FileName = "cmd.exe"; 
     process.StartInfo = startInfo; 
     process.Start(); 
     throw new Exception("test"); 
     Console.ReadLine(); 
     process.CloseMainWindow(); 
     process.Close(); 
} 

をチェックするためにこれを試してください

をCloseMainWindow

を呼び出す前に閉じた例外を持って、それが作成されます得ることはありません子プロセスを閉じる前に、子プロセスが実行されます。

Application.ApplicationExit Eventを使用し、外部プロセスオブジェクトのCloseMainWindow()関数を呼び出して、アプリケーション終了時に強制的に外部プロセスを強制終了したい場合。

+0

ありがとうございますが、私の質問はまだ残っています:親がクラッシュした場合(process.CloseMainWindow();)の前にこのプロセスが実行され続けますか?もしそうなら、それを閉じる方法がありますか? –

+0

@ThomasGrosはい.......開かれたプロセスはいつものように残ります – andy

+0

@ThomasGros - プロセスは閉じられません... udpated answer –

関連する問題