SysadminNews

ReactOS Job Objects: process groups, with limits to scope

On this page
  1. What was merged
  2. Closing a handle is not always termination
  3. Membership and sandboxing need their own evidence

ReactOS merged PR 7500 on August 22, adding basic Job Object support in its kernel. Jobs let software manage associated processes together. The implementation targets pre-Windows-8 functionality and explicitly leaves further work.

Windows job semantics example: with kill-on-close configured, controller A closing its handle does not trigger last-handle termination while monitor B retains another handle.
Windows job semantics example: with kill-on-close configured, controller A closing its handle does not trigger last-handle termination while monitor B retains another handle. Chart : PeopleAreGeek. Data source.
View full-size image

What was merged

The ReactOS pull request covers creating jobs, assigning processes, querying information and terminating a job’s processes, among other operations. Its own description calls the support basic and incomplete. A merged source change is also not evidence that every downloadable release image contains it.

Microsoft’s Job Objects documentation explains the Windows behavior being reimplemented. The job is an operating-system object associated with processes, not merely a parent process or a directory containing executables.

Closing a handle is not always termination

The previous article said closing the job ends every process. That was too broad. On Windows, explicit job termination and closing a handle are different operations. The kill-on-close behavior requires JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE and closing the last job handle.

For an original example, imagine controller A and monitor B each holding a handle to one job. A closing its handle does not close B’s handle. Even with kill-on-close configured, B’s remaining reference prevents that particular last-handle condition from being reached. This illustrates Windows semantics; it is not a claim that this exact scenario passed on the ReactOS build.

Handle ownership therefore belongs in a process supervisor’s design. A leaked reference can change cleanup behavior, while simply killing a parent process is not equivalent to invoking the intended group operation.

Membership and sandboxing need their own evidence

Windows documents rules for child-process association, breakaway and nested jobs. The PR’s pre-Windows-8 target should not be read as full support for later nested-job behavior. Nor does a job automatically provide every security boundary a browser requires.

A useful compatibility test names the exact build and API sequence, records return values, checks actual membership and observes process cleanup. Browser launch, process management and hostile-content isolation are separate questions; one successful primitive cannot answer all three.

ReactOS has filled part of an important compatibility gap. The evidence supports that concrete kernel progress, not a blanket conclusion that modern browsers are now safe or fully functional on it. PeopleAreGeek has reviewed the implementation report and reference semantics, without claiming to have run a ReactOS sandbox test.

Use merged PR status and pre-Windows-8 scope; correct unconditional close-kills-processes claim and distinguish job primitives from a complete browser sandbox.