Python:使用setproctitle更改进程名称

时间:2010-08-23 14:04:55

标签: python process

我有一个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重命名这些进程,以便我可以将命令行参数作为进程名称的一部分包含在内,如果是这样,你会怎么做?

3 个答案:

答案 0 :(得分:1)

如果你将kwarg executable传递给subprocess.Popen,你可以使用参数列表中的第一个参数:

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

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

答案 1 :(得分:1)

setproctitle只能改变它的“自己的”进程标题,因为我会假设一个安全元素,但重写进程表的技术是一种古老的rootkit技术 - 所以显然它是可能的。

此外,setproctitle支持多个操作系统,因此更改进程信息的方法可能会有所不同,但为了便于解释,我假设你在Linux下使用它,让我们看看我们有什么。

Linux使用prctl(),看起来你使用prctl(PR_SET_NAME,“my_new_name”);,这只适用于调用进程。因此,使用setproctitle模块看起来并不像是一种“简单”的方法 - 你只能修改自己。

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

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

答案 2 :(得分:0)

仅限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应用程序来说,它稍微困难一些,而且不太可能是必要的。