티스토리 뷰

System/Windows

[Objects] Job 객체

Tribal 2019. 3. 27. 13:27

Job 객체


  프로세스들의 그룹을 1개의 단위로 관리하도록 허용해주는 객체이다. Job 객체와 연관된 프로세스들은 Job 객체를 제어할 때 함께 제어되는데, 여기서 하나의 작업을 위해 여러 프로세스들이 동작하는 경우 이를 Job 객체로 묶어 쉽게 제어 가능하다는 이점이 있다.


  스레드가 실행 흐름 단위, 프로세스가 실행되는 자원 단위였다면 Job은 작업의 단위라고 생각하면 된다.



주요 기능


API 목록


이러한 제한 정보를 어디에 써먹나?


  Sandbox 구현에 써먹을 수 있고, 실제 Sandbox의 소스 코드를 보면 Job 객체를 사용하여 프로세스들에게 제한을 걸어두고 있다. 아래는 sandbox 코드 내부에서 위의 API 들을 사용하여 Job 객체를 생성하고 제한하는 과정이다.

  • SystemParametersInfo() API를 사용하여 system의 사용을 변경하는 것을 제한
  • Desktops의 생성 및 변경 제한
  • 사용자별 디스플레이 설정 및 해상도 변경 제한
  • 클립보드에 읽고 쓰기 제한
  • Windows broadcasts 메시지 제한
  • SetWindowsHookEx() API를 사용하여 전역 Windows hooks 설정 제한
  • 전역 atom 테이블 접근 제한
  • Job 객체 외부에서 생성된 USER 핸들에 대한 접근 제한
  • 자식 프로세스를 생성할 수 없도록 활성화 프로세스 1개로 제한
  • CPU, 메모리, 입출력 사용 제한

  위는 Sandbox를 예를 들었기 때문에 제한을 두기 위해 사용한다고도 생각할 수 있지만 Job 객체가 연관된 모든 프로세스를 동시에 종료시킬 수 있다는 점에서도 유용하게 사용할 수 있다고 생각한다.



Nested Job(https://docs.microsoft.com/en-us/windows/desktop/ProcThread/nested-jobs)


  Job 객체는 프로세스 뿐 아니라 다른 Job 객체와도 연관될 수 있다. 다른 Job 객체와 연관된 Job 객체를 Nested Job객체라고 한다. Nested Job은 AssignProcessToJobObject() API 함수를 사용하여 이미 특정 job 객체와 연관된 프로세스와 명시적으로 연관하면 생성된다. 이 때 job 객체 구조가 시스템에서 유효하지 않거나, job에 UI limit(JOBOBJECT_BASIC_UI_RESTRICTIONS)이 설정된 경우는 Nested Job이 생성되지 않는다.


  Job에 이미 속해있는 프로세스가 자식 프로세스를 생성하는 경우에는 자동으로 부모 프로세스가 속해있는 Job에 속하게 되는데, CreateProcess에서 CREATE_BREAKAWAY_FROM_JOB 플래그를 설정해주면 자식 프로세스는 어떠한 Job에도 속하지 않는다.



참고


댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31