Program Club

kill 프로세스와 close 프로세스의 차이점은 무엇입니까?

proclub 2020. 12. 8. 20:12
반응형

kill 프로세스와 close 프로세스의 차이점은 무엇입니까?


내가 프로세스를 시작하고이 프로세스를 종료 할 때의 차이점 무엇 Process.Close()Process.Kill()?

나는 명령 줄을 통해 Wireshark를 사용하여 패킷을 캡처하기 시작하는 응용 프로그램이 있기 때문에 Windows = hidden. 그래서 캡처를 중지하고 싶을 때 프로세스를 죽입니다. 그래서 때때로 마지막 패킷이 중간에서 잘렸다는 오류와 함께 캡처가 열리므로 close()이전에 사용 kill()하여이 문제를 해결할 수 있는지 궁금합니다 .

캡처를 시작할 때 Ctrl + C를 눌러 닫을 수 있지만 제 경우에는 숨겨진 상태로 창을 엽니 다. 코드를 통해 비슷한 작업을 수행 할 수 있습니까?


의 차이점은 무엇입니까 Process.Close()와는 process.Kill()?

매뉴얼은 다음과 같이 매우 명확합니다.

Process.Close():

Close 메서드는 프로세스가 대기 중일 때 종료 대기를 중지하고 프로세스 핸들을 닫고 프로세스 별 속성을 지 웁니다. 닫기는 외부에서 참조되는 경우 표준 출력, 입력, 오류 판독기 및 작성기를 닫지 않습니다. [즉, 프로세스 자체가 계속 실행되며 Process인스턴스를 사용하여 더 이상 제어 할 수 없습니다 .]

Process.Kill():

Kill은 프로세스를 강제 종료하지만 CloseMainWindow는 종료 만 요청합니다. [...] CloseMainWindow를 호출하여 프로세스를 종료하라는 요청은 응용 프로그램을 강제로 종료하지 않습니다. 응용 프로그램은 종료하기 전에 사용자 확인을 요청하거나 종료를 거부 할 수 있습니다. 응용 프로그램을 강제로 종료하려면 Kill 메서드를 사용하십시오. CloseMainWindow의 동작은 사용자가 시스템 메뉴를 사용하여 응용 프로그램의 기본 창을 닫는 동작과 동일합니다. 따라서 주 창을 닫아 프로세스를 종료하도록 요청해도 응용 프로그램이 즉시 종료되지는 않습니다.

Process.CloseMainWindow:

주 창에 닫기 메시지를 보내 사용자 인터페이스가있는 프로세스를 닫습니다.


편집 내용 :

Windows = 숨겨진 명령 줄을 통해 명령으로 wireshark를 사용하여 패킷을 캡처하기 시작하는 응용 프로그램이 있기 때문에 물었습니다.

Wireshark가 아닌 WinPcap API 또는 Pcap.Net 라이브러리를 사용하십시오 .


Kill요청 시스템 무례 (윈도우에 대한 호출을 통해 프로세스를 종료 를 TerminateProcess의 시스템 호출). 이것은 작업 관리자의 프로세스 종료와 유사합니다.

닫기 는 .NET의 프로세스에 대한 핸들을 닫지 만 실제로 프로세스 자체를 건드리지는 않습니다. Close에서 호출하기도합니다 Dispose. Jon Skeet의 답변참조하십시오 .

세 번째 옵션은 다음 CloseMainWindow , 않습니다 정상적으로 가까이 차 창을 요청하여 프로그램을 종료합니다. 이것은 작업 표시 줄에서 프로그램을 마우스 오른쪽 버튼으로 클릭하고 닫기를 선택하는 것과 유사합니다.


Kill과 Close는 두 가지 옵션이 아닙니다. 프로세스를 종료하려면 Kill (또는 CloseMainWindow)을 호출해야합니다. Close를 호출하면 리소스가 해제되지만 표준 스트림은 닫히지 않습니다. 스트림을 직접 닫으면 프로세스가 종료되거나 종료되지 않을 수 있으며 프로세스에 따라 다릅니다. 가장 좋은 전략은 프로세스 유형에 따라 Kill 또는 CloseMainWindow를 호출 한 다음 Process 개체를 삭제하는 것입니다.

닫기 는 Process 객체를 닫기 시작합니다. Dispose에서 호출합니다. Close는 일반적으로 Process 개체의 리소스를 관리하는 데 사용됩니다.

Kill 은 프로세스를 종료합니다. 이것은 사용자 인터페이스가없는 프로세스를 종료하는 유일한 방법입니다.

CloseMainWindow 는 프로세스의 기본 창에 닫기 메시지를 보냅니다. 이것은 사용자 인터페이스가있는 프로세스를 중지하는 우아한 방법입니다.


Close () 및 Kill () 을 호출 할 때 시각적으로 어떤 일이 발생하는지 설명하겠습니다 . 다음은 메모장을 열지 만 myProcess.Close () 실행시 마지막에 메모장을 종료하지 않습니다.

Process myProcess;
myProcess = Process.Start("Notepad.exe");
Thread.Sleep(10000);
myProcess.Close();

다음은 메모장을 엽니 다. 10 초 후에 myProcess.Kill ()이 실행될 때 메모장이 닫힙니다.

Process myProcess;
myProcess = Process.Start("Notepad.exe");
Thread.Sleep(10000);
myProcess.Kill();

Process.Kill은 TerminateProcess를 호출합니다.

Process.Close는 당신이 생각하는대로하지 않습니다! 단순히 클래스의 인스턴스에서 사용하는 리소스를 해제합니다. 이것을 읽으십시오 : http://msdn.microsoft.com/en-us/library/system.diagnostics.process.close.aspx

참고 URL : https://stackoverflow.com/questions/13952635/what-are-the-differences-between-kill-process-and-close-process

반응형