Source code for libdebug.utils.posix_spawn
#
# This file is part of libdebug Python library (https://github.com/libdebug/libdebug).
# Copyright (c) 2024 Roberto Alessandro Bertolini. All rights reserved.
# Licensed under the MIT license. See LICENSE file in the project root for details.
#
import os
POSIX_SPAWN_CLOSE = 0
POSIX_SPAWN_DUP2 = 1
POSIX_SPAWN_OPEN = 2
[docs]
def posix_spawn(file: str, argv: list, env: dict, file_actions: list, setpgroup: bool) -> int:
    """Spawn a new process, emulating the POSIX spawn function."""
    child_pid = os.fork()
    if child_pid == 0:
        for element in file_actions:
            if element[0] == POSIX_SPAWN_CLOSE:
                os.close(element[1])
            elif element[0] == POSIX_SPAWN_DUP2:
                os.dup2(element[1], element[2])
            elif element[0] == POSIX_SPAWN_OPEN:
                fd, path, flags, mode = element[1:]
                os.dup2(os.open(path, flags, mode), fd)
            else:
                raise ValueError("Invalid file action")
        if setpgroup == 0:
            os.setpgid(0, 0)
        os.execve(file, argv, env)
    return child_pid