kill 프로세스와 close 프로세스의 차이점은 무엇입니까?
내가 프로세스를 시작하고이 프로세스를 종료 할 때의 차이점 무엇 Process.Close()과 Process.Kill()?
나는 명령 줄을 통해 Wireshark를 사용하여 패킷을 캡처하기 시작하는 응용 프로그램이 있기 때문에 Windows = hidden. 그래서 캡처를 중지하고 싶을 때 프로세스를 죽입니다. 그래서 때때로 마지막 패킷이 중간에서 잘렸다는 오류와 함께 캡처가 열리므로 close()이전에 사용 kill()하여이 문제를 해결할 수 있는지 궁금합니다 .
캡처를 시작할 때 Ctrl + C를 눌러 닫을 수 있지만 제 경우에는 숨겨진 상태로 창을 엽니 다. 코드를 통해 비슷한 작업을 수행 할 수 있습니까?
의 차이점은 무엇입니까
Process.Close()와는process.Kill()?
매뉴얼은 다음과 같이 매우 명확합니다.
Close 메서드는 프로세스가 대기 중일 때 종료 대기를 중지하고 프로세스 핸들을 닫고 프로세스 별 속성을 지 웁니다. 닫기는 외부에서 참조되는 경우 표준 출력, 입력, 오류 판독기 및 작성기를 닫지 않습니다. [즉, 프로세스 자체가 계속 실행되며
Process인스턴스를 사용하여 더 이상 제어 할 수 없습니다 .]
Kill은 프로세스를 강제 종료하지만 CloseMainWindow는 종료 만 요청합니다. [...] CloseMainWindow를 호출하여 프로세스를 종료하라는 요청은 응용 프로그램을 강제로 종료하지 않습니다. 응용 프로그램은 종료하기 전에 사용자 확인을 요청하거나 종료를 거부 할 수 있습니다. 응용 프로그램을 강제로 종료하려면 Kill 메서드를 사용하십시오. 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
'Program Club' 카테고리의 다른 글
| 이 간단한 문자열이 유효한 JSON으로 간주됩니까? (0) | 2020.12.08 |
|---|---|
| Bootstrap만으로 핀터 레스트와 같은 레이아웃을 만들 수 있습니까? (0) | 2020.12.08 |
| CMake에서 여러 실행 파일 추가 (0) | 2020.12.08 |
| Typescript-다차원 배열 초기화 (0) | 2020.12.08 |
| Swift에서 let in protocol을 사용할 수없는 이유는 무엇입니까? (0) | 2020.12.08 |