0

我正在尝试在 python 中使用并subprocess module尝试获取process idfirefox

cmd = "firefox &" 
fire = subprocess.Popen(cmd,shell=True, stdout=subprocess.PIPE, preexec_fn=os.setsid)
fire_task_procs = find_task(fire.pid)
print "fire_task_procs",fire_task_procs

我想我得到了pid我正在执行的命令行参数。我做错了什么吗?我确认使用ps aux | grep firefox

4

2 回答 2

2

如果您使用shell=Truepid,您将得到启动 shell 的那个,而不是您想要的进程的那个,特别是当您&用来将进程发送到后台时。

您应该使用长(列表)形式来提供参数,而不使用&,因为如果将其与输出重定向结合使用,这无论如何都没有意义。

于 2013-04-12T21:16:39.390 回答
1

不要使用外壳,而只需使用

subprocess.Popen(['firefox'], stdout=subprocess.PIPE, preexec_fn=os.setsid)

但是,如果 firefox 已经在运行,那么这也不起作用,因为在这种情况下,firefox 将使用一些 IPC 来告诉现有进程打开一个新窗口然后终止。

于 2013-04-12T21:20:02.170 回答