如果将preexec_fn设置为可调用对象,则将在执行子级之前在子进程中调用此对象。 (仅适用于POSIX)
然后为什么在执行preexec_fn函数时父进程挂起?如果在子进程中执行,则父进程应该能够继续。
这是一个程序的小示例,该程序创建一个新的“ ls”进程,然后该进程休眠4秒钟。理想情况下,应立即打印“已到达”,但并非如此。 4秒后打印出来“达到”。
import os
import subprocess
import sys
import tempfile
import time
def sleep_a_little():
time.sleep(4)
p = subprocess.Popen(["ls"], preexec_fn=sleep_a_little)
print("reached")
答案 0 :(得分:0)
我遇到了类似的问题,尽管似乎发生了preexec_fn
函数仅由父级运行的情况。
我的preexec_fn
使用os.setuid
和os.setgid
从特权父级启动用户进程。
在生成线程之前调用whoami
实用程序,然后在生成线程之后再次调用,显示我的父级模拟了用户帐户,而不仅仅是模拟了它创建的子级帐户。