2017-04-05 17 views
0

mintty.exe 죽일 수 없습니다CSHARP의 Cygwin에서 내가 <code>System.Diagnostics</code>에서 <code>Process</code> 클래스로 작업하고 여기에 내 코드가되었습니다

public void doMain() { 
    Process cygwin = new Process(); 
    cygwin.StartInfo.FileName = "C:\\cygwin64\\bin\\mintty.exe"; 
    cygwin.Start(); 
    cygwin.Refresh(); 
    Thread.Sleep(1000); 
    cygwin.Kill(); 
    cygwin.WaitForExit(); 
} 

는 일반적으로이 mintty.exe 프로세스를 실행 한 후 일초를 기다린 후 그 프로세스를 종료해야하지만, kill 호출 전에 닫혔다는 오류를 내게줍니다.

처리되지 않은 'System.InvalidOperationException'형식의 예외가 추가 정보 System.dll을
발생 :이 예외가 발생 라인 cygwin.Kill(); 전화에

는 프로세스가 종료 된 처리하지 요청을 할 수 있기 때문이다.

왜 이런 일이 발생합니까?!
"C:\\cygwin64\\bin\\mintty.exe""C:\\cygwin64\\bin\\bash.exe"으로 대체하면 예외가 사라집니다!
무엇이 문제입니까?

+0

코드에서가 아니라 '파일 탐색기'에서'mintty.exe'를 실행하면 즉시 종료합니까? 'bash.exe'는로드 할 때 커맨드 라인 유틸리티를 제공하지만'mintty'에는 그런 일이 없습니다. –

+0

@JayGould 아니요! 왜 즉시 종료해야합니까? 나는'1000' 밀리 초를 기다린 다음 프로세스를 죽일 코드를 만들었습니다. 음,'mintty.exe'는 어떻게 든 'bash.exe'에 대한 래퍼와 같습니다. – newpeople

+0

먼저, kill 메소드 실행 중에 오류/예외가 의미하는 바를 자문 해보십시오. 내가 읽었을 때, 당신이 죽이려고하는 프로세스가 이미 종료되었으므로 kill은 실패합니다. 아래 내 대답 읽기. 시작 프로세스는 자식 프로세스 #c를 생성하기 위해 fork 프로세스를 만듭니다. 프로세스 #p가 종료됩니다. 프로세스 #c는 민트 티 윈도우를 엽니 다. 당신은 프로세스 #p를 죽이려하지만 이미 죽거나 빠져 나왔다. cygwin 객체의 프로세스 번호는 무엇입니까? mintty의 프로세스 번호는 무엇입니까 (힌트 : 작업 관리자 사용)? –

답변

0

이미 프로세스를 종료 한 후 cygwin.WaitForExit()을 호출하고 있으므로 오류가 발생했습니다.

업데이트합니다 코드 :

public void doMain() { 
    Process cygwin = new Process(); 
    cygwin.StartInfo.FileName = "C:\\cygwin64\\bin\\mintty.exe"; 
    cygwin.Start(); 
    cygwin.Refresh(); 
    Thread.Sleep(1000); 
    cygwin.Kill(); 
    //cygwin.WaitForExit(); 
} 

하고 작동합니다.

+0

해당 줄을 주석 처리 한 후 다시 작동하지 않습니다. 또한 https://msdn.microsoft.com/en-us/library/system.diagnostics.process.kill(v=vs.110).aspx를 읽으십시오. 'Kill 메서드는 비동기 적으로 실행됩니다. Kill 메서드를 호출 한 후 WaitForExit 메서드를 호출하여 프로세스가 종료 될 때까지 기다리거나 HasExited 속성을 검사하여 프로세스가 종료되었는지 확인하십시오. " – newpeople

+0

오류가 발생한 줄은 무엇입니까? "this after"라고 말하면, WaitForExit()가 호출 될 것인가? –

+0

나는 그것이 실행되지 않는다고 생각한다. 필자는 선상에서 '선'을 의미 한 후에. – newpeople

0

이것은 시작 프로세스 및 방법과 독립적 인 Windows 프로그램을 시작하는 간단한 방법입니다. 프로그램이 즉시 fork (새 프로세스 시작)하고, 원래 프로세스가 종료되는 동안 새 창은 mintty 창을 엽니 다. 이것은 당신이하려는 일을하지 못하도록 고안되었습니다. 새 프로세스 트리에 자식을 만듭니다. 그렇지 않으면 cmd 창에서 프로그램을 실행하면 cmd 창을 닫을 때 프로그램이 닫힙니다.

+0

cmd를 열고'cd "c :/cygwin64/bin"'에 이어'mintty.exe '를 입력하면 cygwin 창이 열리지 만 cmd 창을 닫을 때 닫히지 않습니다. 이걸 제외하고, 나는'프로세스'클래스가 모든 것을 올바르게 수행하고 있다고 생각한다. 왜냐하면 그것이'exec'을 사용했다면 내 winform을 보았을 것입니다. (그 코드는 버튼을 치는 메소드를 클릭하는 gui 앱의 일부였습니다.) 닫히고, 사실입니까? 내가 잘못하면 제발 제발. 감사 :) – newpeople