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