“어린이 프로세스는 손잡이를 물려받을 수 있습니까?”라는 의미는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/2040768

  •  19-09-2019
  •  | 
  •  

문제

SDK에 따라 주어진 프로세스에 의해 생성 된 아동 프로세스에 "상속"될 수있는 Win32 객체가 있습니다. (이벤트, 뮤 테스, 파이프, ...)

그것이 실제로 무엇을 의미합니까?

내가 만든 이벤트 개체가 있다고 가정 해 봅시다. CreateEvent, 한 번 bInheritHandle == true, 그리고 또 다른 시간 == false.

이제 나는 어린이 과정을 시작합니다. 이 두 이벤트 처리는 어린이 프로세스에 어떤 영향을 미칩니 까? 어떤 시나리오에서 그것들이 다릅니 까?

도움이 되었습니까?

해결책

객체를 생성/열고 해당 핸들을 상속받을 수있는 경우, 핸들을 상속받을 수있는 하위 프로세스 (예 : 지정할 수 있습니다. bInheritHandles = TRUE CreateProcess의 경우)에는 해당 핸들의 사본이 있습니다. 상속 된 핸들은 부모 핸들과 동일한 핸들 값을 갖습니다. 예를 들어 :

  • CreateEvent 핸들을 이벤트 객체로 반환합니다. 손잡이는 0x1234.
  • 해당 핸들을 상속받을 수 있습니다.
  • 당신은 당신의 손잡이를 물려받는 자식 프로세스를 만듭니다.
  • 그 어린이 과정은 이제 손잡이를 사용할 수 있습니다 0x1234 전화하지 않고 CreateEvent 또는 OpenEvent. 예를 들어 아동 프로세스의 명령 줄에서 핸들 값을 전달할 수 있습니다.

이것은 이름이없는 객체에 유용합니다. 이름이 없기 때문에 다른 프로세스는 열 수 없습니다. 핸들 상속을 사용하면 하위 아동 프로세스를 사용하면 원하는 경우 이름이없는 객체에 대한 핸들을 얻을 수 있습니다.

다른 팁

기존 답변에서 이루어지지 않은 한 가지 점은 아동 프로세스가 핸들을 상속받을 수 있도록하는 것이 아동 프로세스에만 영향을 미치지 않는다는 것입니다. 또한 핸들이 참조하는 물체의 수명에 영향을 줄 수 있습니다. 부모 프로세스가 종료되면 아동 프로세스의 핸들은 물체를 살리게합니다.

자식 프로세스가 핸들을 상속하는 데 허용 할 때는 객체가 예정보다 더 오래 살 수 있는지 여부를 고려해야합니다. 예를 들어, 일부 응용 프로그램은 한 번에 하나의 인스턴스를 실행할 수 있도록하고 이름이 주어진 이벤트 객체를 만들고 이미 존재하는지 확인하여이를 수행 할 수 있습니다. 그들이 이벤트 객체를 물려 받고 부모를 놀라게하는 아동 프로세스를 만들면 잘못된 긍정적 인 결과를 초래할 수 있습니다.

보다 일반적으로, 파일에 상속 된 핸들은 파일이 사용되는 것보다 더 오래 사용되도록 (따라서 액세스 할 수 없음)를 초래할 수 있습니다.

이러한 이유로 모범 사례는 다음과 같습니다.

  • 구체적으로 상속받을 필요가없는 한 모든 핸들을 상인 할 수없는 것으로 만드십시오.

  • 하위 프로세스가 손잡이를 상속받을 필요가 없으면 통과하십시오. FALSE ~을 위한 bInheritHandles.

  • 하위 프로세스가 손잡이를 상속 해야하는 경우 필요한 특정 핸들을 물려받을 수 있습니다..

반면에, 이것은 때때로 유용 할 수 있습니다. 예를 들어, 당신이 있다면 원하다 아동 프로세스는 부모 프로세스의 인스턴스로 계산되거나 자녀가 종료 될 때까지 파일이 접근 할 수없는 상태로 유지됩니다. 또 다른 요령은 자식이 이름이 지정된 물체에 손잡이를 물려받은 다음 물체의 존재 또는 존재하지 않음을 사용하여 프로세스 핸들이나 프로세스 ID를 전달하지 않고도 자녀가 여전히 살아 있는지 여부를 결정하는 것입니다.

이벤트를 생성하고 핸들을 아동 프로세스에 의해 상속받을 수있게하는 경우, 자식 프로세스는 핸들을 부모가 만든 동일한 객체에 사용할 수 있습니다. 이것은 작업이 완료되었을 때 어린이가 이벤트 핸들을 사용하여 부모에게 신호를 보내는 방식으로 사용할 수 있습니다 (상속 가능한 이벤트 객체 핸들에 대한 다른 많은 용도가 있습니다).

편집 : 정보가 제거되었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top