[파이썬] subprocess `subprocess.CREATE_BREAKAWAY_FROM_JOB`: 작업에서 분리 설정

subprocess

The subprocess module in Python provides a convenient way to spawn and communicate with child processes. One of the lesser-known options in the subprocess module is the CREATE_BREAKAWAY_FROM_JOB flag, which allows a process to detach itself from the parent process.

When a process is created, it is typically associated with a job object that manages the resources and behavior of the process. By default, child processes spawned by subprocess are attached to the same job object as the parent process. However, in some cases, it may be desirable to separate the child process from the parent and allow it to run independently.

To achieve this, we can use the creationflags parameter of the subprocess.Popen constructor in combination with the subprocess.CREATE_BREAKAWAY_FROM_JOB flag:

import subprocess

# Create a child process with CREATE_BREAKAWAY_FROM_JOB flag
p = subprocess.Popen(['python', 'child_process.py'], creationflags=subprocess.CREATE_BREAKAWAY_FROM_JOB)

# Do some other work in the parent process

# Wait for the child process to complete
p.wait()

In the above example, we create a child process using the subprocess.Popen constructor and pass the creationflags parameter with the subprocess.CREATE_BREAKAWAY_FROM_JOB flag. This will detach the child process from the parent process’s job object and allow it to run independently.

It is important to note that the CREATE_BREAKAWAY_FROM_JOB flag is only available on Windows operating systems. On other platforms such as macOS and Linux, this flag is not supported.

Using the CREATE_BREAKAWAY_FROM_JOB flag can be useful in scenarios where you need to run a child process independently of the parent process. This can be handy when you want the child process to continue running even if the parent process terminates or when you want to isolate the child process from any resource limitations imposed by the parent process’s job object.

In conclusion, the subprocess.CREATE_BREAKAWAY_FROM_JOB flag in the subprocess module allows you to detach a child process from the parent process’s job object on Windows. This enables the child process to run independently and can be useful in various scenarios where process isolation or longevity is desired.