2008-10-08 2 views
5

다른 exe를 실행하기 위해 System.Diagnostics.Process를 사용하는 C# 응용 프로그램이 있습니다. 프로세스가 try 블록에서 시작되고 finally 블록에서 닫힌 예제 코드가 나왔습니다. 또한 프로세스가 닫히지 않은 예제 코드를 보았습니다.내 C# 콘솔 앱에서 System.Diagnostics.Process를 닫지 않으면 어떻게됩니까?

프로세스가 닫히지 않은 경우 어떻게됩니까?

프로세스를 생성 한 콘솔 앱이 닫힐 때 프로세스에서 사용하는 리소스가 회수됩니까?

많은 프로세스를 열고 오랜 기간 동안 열려있는 콘솔 앱에서 프로세스를 닫지 않는 것이 좋습니까?

건배!

답변

14

때를 종료 다른 과정, 의 모든 리소스가 모두 해제됩니다,하지만 당신은 아직도 당신이 Close()를 호출하지 않는 한 (프로세스에 대한 정보의 블록에 대한 포인터 인) 프로세스 핸들에 개최합니다 참조 : Process. 나는 많은 문제가있을 거라고 의심하지만, 당신은일지도 모른다. 엄지 손가락의 규칙으로

using (Process p = Process.Start(...)) 
{ 
    ... 
} 

: Process은 그래서 당신은 당신을 위해 자동으로 Dispose (따라서 Close())를 호출합니다 C#의 using(...) 문을 사용할 수 있습니다 IDisposable 구현 뭔가 구현하는 경우 IDisposable, 당신 정말 해야 전화 Dispose/Close 또는 using(...)을 사용하십시오.

+4

프로세스에서 닫기를 호출해도 프로세스가 종료되지 않습니다. –

1

사용자가 직접 시작한 것처럼 계속 실행됩니다.

1

프로세스는 독립 실행 형 개체입니다. 프로그래밍 방식으로 프로세스를 만드는 것은 데스크톱에서 프로세스를 시작하는 것과 거의 같습니다.

생성 한 프로세스의 핸들은 편의상 반환됩니다. 예를 들어 입력 스트림과 출력 스트림에 액세스하거나 (본 것처럼) 스트림을 죽일 수 있습니다.

상위 프로세스가 종료되면 리소스가 회수되지 않습니다.

많은 프로세스를 여는 것이 좋지 않은 경우는 너무 많이 열어 CPU와 RAM에서 처리 할 수없는 경우입니다.

관련 문제