我的目标是能够在单独的进程中启动 shell 脚本并通过 linux ptrace 系统调用检查它。 问题是我需要在它开始之前获取进程 PID。像 subprocess.Popen(['ls', '-l']) 或 python-sh 之类的东西会立即运行命令,所以有一次我试图通过它的 PID 检查这个进程,它很可能已经完成了。 另一方面,我不能使用 os.fork + exec,因为我开始的 bash 命令会覆盖 python 代码。
最佳答案
如果您使用的是 Unix,我认为您可以在 Popen 构造函数中使用 preexec_fn
参数。
根据子流程的文档:
If preexec_fn is set to a callable object, this object will be called in the child process just before the child is executed. (Unix only)
因为它在子进程中运行,您可以使用os.getpid()
来获取子进程。
关于python子进程popen立即启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24710900/