2013-11-01 3 views
4

System.Diagnostics.Process를 사용하여 여러 응용 프로그램을 관리하는 콘솔 응용 프로그램 (호스트라고도 함)이 있습니다. 호스트는 이러한 외부 프로세스의 시작 및 중지를 제어합니다.C#은 자식 프로세스에 ctrl-c를 방지합니다.

콘솔에 Ctrl + C (SIGINT)를 실행하면 호스트는 다른 프로세스를 안전하게 종료해야합니다. 문제는 호스트가 안전하게 종료하기 전에 다른 프로세스에서도 Ctrl + C를 수신하고 즉시 종료한다는 것입니다.

나는 Ctrl + C가 콘솔 프로세스 트리의 모든 프로세스에 실행됨을 알고 있습니다. 호스트가 아직 실행중인 경우 Ctrl + C가 다른 프로세스에 도달하는 것을 방지하려면 어떻게해야합니까? 나는 다른 프로세스의 개발에 관여하지 않았으므로 Ctrl + C를 직접 처리 할 수 ​​없다. 감사합니다.

답변

4

ApparentlyConsole.TreatCtrlCAsInput = true을 설정하면 해당 키 입력을 처리하고 다른 프로세스를 중지 한 다음 나갈 수 있습니다. MSDN docs이 속성 ...

가져 또는 제어 보조 키와 C 콘솔 키 (Ctrl + C)의 조합은 통상의 입력으로서이거나 중단으로 간주되는지 여부를 나타내는 값을 설정 따르면 운영 체제에서 처리합니다.

+0

: 같은

코드에서이 보인다. 저에게 그것은 조금 더 이상적/더 강력한 것처럼 보일 것입니다 ... –

1

정확한 답변으로 작성하십시오.

Console.TreatCtrlCAsInput을 설정하면 SIGINT 신호가 콘솔 프로세스 트리의 모든 프로세스를 치는 대신 터미널에서 실행중인 응용 프로그램으로 전송되는 제어 수정 자와 함께 C 키가됩니다. 나는 당신이 처리하기로 묶을 수있는 Win32API 유형 일이 있는지 궁금

static void Main(string[] args) 
{ 
    System.Console.TreatControlCAsInput = true; 

    // start the server 
    Server server = new Server(); 
    server.Start(); 

    // wait for Ctrl+C to terminate 
    Console.WriteLine("Press Ctrl+C To Terminate"); 
    ConsoleKeyInfo cki; 
    do 
    { 
     cki = Console.ReadKey(); 
    } while (((cki.Modifiers & ConsoleModifiers.Control) == 0) || (cki.Key != ConsoleKey.C)); 

    // stop the server 
    server.Stop(); 
} 
관련 문제