繁体   English   中英

Python:使用setproctitle更改进程名称

[英]Python: Changing process name with setproctitle

我有一个python脚本,可以启动许多C ++程序,每个程序都通过命令行参数传递,如下所示

process_path "~/test/"
process_name "test"
num_process = 10

for p in range(1, num_processes, 1):
    subprocess.Popen([process_path + process_name, str(p)], shell = False)

我们可以使用setproctitle重命名这些进程中的每个进程,以便我可以将命令行参数作为进程名称的一部分包括在内,如果是这样,您将如何处理?

setproctitle只能更改它的“自己的”进程标题,就像我认为是安全元素一样,但是重写进程表的技术是一种古老的rootkit技术-显然有可能。

此外,setproctitle支持多种操作系统,因此更改过程信息的方法可能会有所不同,但是为了便于说明,我假设您在Linux下使用它并了解我们所拥有的。

Linux使用prctl(),就像使用prctl(PR_SET_NAME,“ my_new_name”);一样,这仅在调用过程中有效。 因此,看起来似乎没有使用setproctitle模块执行此操作的“简便”方法-您只能进行自我修改。

最好的选择是修改C ++代码,使其使用prctl。

如果您不使用Linux,请发布您正在使用的内容,因为其他操作系统提供的其他机会和方法与prctl的限制有很大不同。

如果你传递一个kwarg executablesubprocess.Popen ,您可以使用参数列表中的第一个参数:

subprocess.Popen(['some string you choose', str(p)],
                 executable=process_path+process_name, shell=False)

文档说:“在Unix上,它成为ps等实用程序中正在执行的程序的显示名称。”

仅Windows :进程名称通常表示正在运行的实际可执行映像(例如calc.exe)。 另一方面,可以使用start命令轻松地为控制台(CUI)应用程序更改进程标题(这是显示在任务栏上的文本),而不用直接运行该应用程序(将标题作为第一个参数;使用start / ?以获取详细信息):

for p in range(1, num_processes, 1):
    subprocess.Popen(['start', str(p), process_path + process_name, str(p)], shell = False)
    #                            ^ this is the title

对于GUI应用程序,它要困难一些,而所需的可能性要少得多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM