2017-12-11 6 views
1

나는 간단하면서도 흥미로운 질문이 있습니다.부모 충돌 후 C# 하위 프로세스 동작

C# 응용 프로그램에서 프로세스 (node.js 서버)를 시작해야합니다.

응용 프로그램 내에서 서버를 시작하는 방법을 설명하는 코드 조각을 발견했습니다.

내 질문은 : 부모 프로세스 (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를 시작하고 자신의 윈도우 내가 코드를 CloseMainWindow() 기능을 가지고로 그 프로그램을 닫습니다.

Cmd는 별도의 프로세스이므로 시작한 프로그램을 닫을 때 닫히지 않습니다.

parent가 충돌 (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 대답 –