DreamineVMS 1.0.0.0
Windows PC의 RTSP·USB 카메라 영상을 HLS로 변환해 원격 CCTV Viewer에 전달하는 데스크톱 에이전트입니다.
로딩중...
검색중...
일치하는것 없음
DreamineVMS.Services.Streaming.ChildProcessJob 클래스 참조sealed

더 자세히 ...

DreamineVMS.Services.Streaming.ChildProcessJob에 대한 상속 다이어그램 :
DreamineVMS.Services.Streaming.ChildProcessJob에 대한 협력 다이어그램:

클래스

struct  JOBOBJECT_BASIC_LIMIT_INFORMATION
struct  IO_COUNTERS
struct  JOBOBJECT_EXTENDED_LIMIT_INFORMATION

Public 멤버 함수

 ChildProcessJob ()
bool AddProcess (Process process)
void Dispose ()

Private 타입

enum  JobObjectInfoType { ExtendedLimitInformation = 9 }

Private 멤버 함수

static IntPtr CreateJobObject (IntPtr lpJobAttributes, string? lpName)
static bool SetInformationJobObject (IntPtr hJob, JobObjectInfoType infoType, IntPtr lpJobObjectInfo, uint cbJobObjectInfoLength)
static bool AssignProcessToJobObject (IntPtr hJob, IntPtr hProcess)
static bool CloseHandle (IntPtr hObject)

Private 속성

IntPtr _handle
bool _disposed

정적 Private 속성

const uint JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE = 0x00002000

상세한 설명

자식 프로세스를 Windows Job Object에 묶어, 부모 프로세스가 비정상 종료되더라도 자식 프로세스(ffmpeg)가 함께 종료되도록 보장하는 헬퍼입니다.

부모 프로세스가 정상 경로(StopAsync)로 종료되지 못하고 강제 종료될 때, Job Object에 KILL_ON_JOB_CLOSE 플래그가 설정되어 있으면 Job 핸들이 닫히는 순간 OS가 소속 자식 프로세스를 모두 종료합니다. 이를 통해 ffmpeg 고아 프로세스가 남는 문제를 구조적으로 차단합니다.

ChildProcessJob.cs 파일의 25 번째 라인에서 정의되었습니다.

멤버 열거형 문서화

◆ JobObjectInfoType

Job Object Info Type 기능과 관련 상태를 캡슐화합니다.

열거형 멤버
ExtendedLimitInformation 

Extended Limit Information 값을 나타냅니다.

ChildProcessJob.cs 파일의 182 번째 라인에서 정의되었습니다.

183 {
192 ExtendedLimitInformation = 9
193 }

생성자 & 소멸자 문서화

◆ ChildProcessJob()

DreamineVMS.Services.Streaming.ChildProcessJob.ChildProcessJob ( )
inline

ChildProcessJob 클래스의 새 인스턴스를 초기화하고 Job Object를 생성합니다.

ChildProcessJob.cs 파일의 54 번째 라인에서 정의되었습니다.

55 {
56 _handle = CreateJobObject(IntPtr.Zero, null);
57 if (_handle == IntPtr.Zero)
58 {
59 // Job Object를 만들 수 없는 환경(권한 등)에서는 핸들이 0으로 남고,
60 // AddProcess는 무시됩니다. 이 경우 기존 동작(개별 Kill)으로 폴백됩니다.
61 return;
62 }
63
64 JOBOBJECT_BASIC_LIMIT_INFORMATION basicLimit = new()
65 {
66 LimitFlags = JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE
67 };
68
69 JOBOBJECT_EXTENDED_LIMIT_INFORMATION extendedLimit = new()
70 {
71 BasicLimitInformation = basicLimit
72 };
73
74 int length = Marshal.SizeOf<JOBOBJECT_EXTENDED_LIMIT_INFORMATION>();
75 IntPtr extendedPtr = Marshal.AllocHGlobal(length);
76 try
77 {
78 Marshal.StructureToPtr(extendedLimit, extendedPtr, false);
79
80 if (!SetInformationJobObject(
81 _handle,
82 JobObjectInfoType.ExtendedLimitInformation,
83 extendedPtr,
84 (uint)length))
85 {
86 CloseHandle(_handle);
87 _handle = IntPtr.Zero;
88 }
89 }
90 finally
91 {
92 Marshal.FreeHGlobal(extendedPtr);
93 }
94 }

다음을 참조함 : _handle, CloseHandle(), CreateJobObject(), JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE, SetInformationJobObject().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

멤버 함수 문서화

◆ AddProcess()

bool DreamineVMS.Services.Streaming.ChildProcessJob.AddProcess ( Process process)
inline

지정한 프로세스를 Job Object에 추가합니다.

매개변수
processJob에 묶을 자식 프로세스입니다.
반환값
성공 여부입니다. Job Object를 사용할 수 없는 환경에서는 false를 반환합니다.

ChildProcessJob.cs 파일의 120 번째 라인에서 정의되었습니다.

121 {
122 ArgumentNullException.ThrowIfNull(process);
123
124 if (_handle == IntPtr.Zero || _disposed)
125 {
126 return false;
127 }
128
129 try
130 {
131 return AssignProcessToJobObject(_handle, process.Handle);
132 }
133 catch (InvalidOperationException)
134 {
135 // 프로세스가 이미 종료된 경우 등.
136 return false;
137 }
138 }

다음을 참조함 : _disposed, _handle, AssignProcessToJobObject().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ AssignProcessToJobObject()

bool DreamineVMS.Services.Streaming.ChildProcessJob.AssignProcessToJobObject ( IntPtr hJob,
IntPtr hProcess )
private

Assign Process To Job Object 작업을 수행합니다.

매개변수
hJobh Job에 사용할 IntPtr 값입니다.
hProcessh Process에 사용할 IntPtr 값입니다.
반환값
Assign Process To Job Object 조건이 충족되면 true이고, 그렇지 않으면 false입니다.

다음에 의해서 참조됨 : AddProcess().

이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ CloseHandle()

bool DreamineVMS.Services.Streaming.ChildProcessJob.CloseHandle ( IntPtr hObject)
private

Close Handle 작업을 수행합니다.

매개변수
hObjecth Object에 사용할 IntPtr 값입니다.
반환값
Close Handle 조건이 충족되면 true이고, 그렇지 않으면 false입니다.

다음에 의해서 참조됨 : ChildProcessJob(), Dispose().

이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ CreateJobObject()

IntPtr DreamineVMS.Services.Streaming.ChildProcessJob.CreateJobObject ( IntPtr lpJobAttributes,
string? lpName )
private

Job Object 값을 생성합니다.

매개변수
lpJobAttributeslp Job Attributes에 사용할 IntPtr 값입니다.
lpNamelp Name에 사용할 string? 값입니다.
반환값
Create Job Object 작업에서 생성한 IntPtr 결과입니다.

다음에 의해서 참조됨 : ChildProcessJob().

이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ Dispose()

void DreamineVMS.Services.Streaming.ChildProcessJob.Dispose ( )
inline

Job Object 핸들을 닫습니다. KILL_ON_JOB_CLOSE에 의해 소속된 모든 자식 프로세스가 함께 종료됩니다.

ChildProcessJob.cs 파일의 148 번째 라인에서 정의되었습니다.

149 {
150 if (_disposed)
151 {
152 return;
153 }
154
155 _disposed = true;
156
157 if (_handle != IntPtr.Zero)
158 {
159 CloseHandle(_handle);
160 _handle = IntPtr.Zero;
161 }
162 }

다음을 참조함 : _disposed, _handle, CloseHandle().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ SetInformationJobObject()

bool DreamineVMS.Services.Streaming.ChildProcessJob.SetInformationJobObject ( IntPtr hJob,
JobObjectInfoType infoType,
IntPtr lpJobObjectInfo,
uint cbJobObjectInfoLength )
private

Information Job Object 값을 설정합니다.

매개변수
hJobh Job에 사용할 IntPtr 값입니다.
infoTypeinfo Type에 사용할 JobObjectInfoType 값입니다.
lpJobObjectInfolp Job Object Info에 사용할 IntPtr 값입니다.
cbJobObjectInfoLengthcb Job Object Info Length에 사용할 uint 값입니다.
반환값
Set Information Job Object 조건이 충족되면 true이고, 그렇지 않으면 false입니다.

다음에 의해서 참조됨 : ChildProcessJob().

이 함수를 호출하는 함수들에 대한 그래프입니다.:

멤버 데이터 문서화

◆ _disposed

bool DreamineVMS.Services.Streaming.ChildProcessJob._disposed
private

disposed 값을 보관합니다.

ChildProcessJob.cs 파일의 44 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : AddProcess(), Dispose().

◆ _handle

IntPtr DreamineVMS.Services.Streaming.ChildProcessJob._handle
private

handle 값을 보관합니다.

ChildProcessJob.cs 파일의 35 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : AddProcess(), ChildProcessJob(), Dispose().

◆ JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE

const uint DreamineVMS.Services.Streaming.ChildProcessJob.JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE = 0x00002000
staticprivate

JOB OBJECT LIMIT KILL ON JOB CLOSE 값을 보관합니다.

ChildProcessJob.cs 파일의 172 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : ChildProcessJob().


이 클래스에 대한 문서화 페이지는 다음의 파일로부터 생성되었습니다.: