如何在Python中告诉进程ID

R S*_*R S 7 python process mosix

我正在使用Linux上的集群系统(www.mosix.org),它允许我运行作业并让系统在不同的计算机上运行它们.工作就像这样运行:

mosrun ls &
Run Code Online (Sandbox Code Playgroud)

这自然会创建进程并在后台运行它,返回进程ID,如下所示:

[1] 29199
Run Code Online (Sandbox Code Playgroud)

稍后它会回来.我正在编写一个可以运行作业并控制它们的Python基础结构.为此,我想使用上面的mosrun程序运行作业,并保存生成的进程的进程ID(在这种情况下为29199).这自然不能使用os.system或commands.getoutput来完成,因为打印的ID不是进程打印输出的内容...任何线索?

编辑:

由于python脚本仅用于初始运行脚本,因此脚本需要比python shell运行更长时间.我想这意味着mosrun进程不能成为脚本的子进程.有什么建议?

谢谢

Ale*_*lli 2

看起来您想确保子进程被守护进程——我所指的 PEP 3143,记录并指向了该子进程的参考实现,并且也指向了其他进程。

一旦你的进程(仍在运行 Python 代码)被守护进程,无论是通过 PEP 3143 或其他提供的方式,你都可以os.execl(或其他os.exec...函数)你的目标代码 - 这会在完全相同的进程中运行所述目标代码我们刚才说是守护进程,所以它会根据需要不断被守护进程。

最后一步不能使用,因为它需要在同一个subprocess(守护进程)进程中运行,覆盖其可执行代码——这正是和朋友的用途。os.execl

可以想象,在守护进程之前,第一步可以通过 完成subprocess,但这有点不方便(您需要将 daemonize-then-os.exec 代码放在单独的 中.py):最常见的是,您只想os.fork立即守护子进程。

subprocess作为运行其他进程的主要跨平台方式,它相当方便,但它不能真正取代 Unix 的旧式“fork 和 exec”方法来实现高级用途(例如本例中的守护进程)——这就是它的原因一件好事是 Python 标准库还允许您通过模块中的这些函数来完成后者os!-)