如何找到相同脚本的多个PID

时间:2012-10-18 07:07:31

标签: python cross-platform

$ ps aux | grep file1.py
xyz    6103  0.0  0.1  33476  6480 pts/1    S+   12:00   0:00 python file1.py
xyz    6188  0.0  0.1  33476  6472 pts/2    S+   12:05   0:00 python file1.py
xyz    7294  0.0  0.0   8956   872 pts/4    S+   12:49   0:00 grep --color=auto file1.py
过程6103已经在12:00开始并且在5分钟之后过程6188开始。我需要找出两个过程6103,6188

pid_finder.py

import psutil

PROCNAME = "file1.py"

process = []
for proc in psutil.process_iter():
    if proc.name == PROCNAME:
        print proc

但上面的脚本没有打印出来。可以“psutil”模块有其他选项来查找脚本进程的pid。

psutil.test()给出了以下o / p ...

xyz      6103  0.0  0.2   33476    6480 /dev/pts/1    13:23   30:00  python
xyz      6188  0.0  0.2   33476    6480 /dev/pts/2    13:23   30:00  python
xyz      8831  0.0  1.0  430612   39796 ?             13:31   30:03  gedit
xyz      8833  0.0    ?   14540     808 ?             13:31   30:00  gnome-pty-helper
xyz      8835  0.0  0.1   23636    5008 /dev/pts/5    13:31   30:00  bash
xyz      9367  0.0  0.2   51580    7740 /dev/pts/4    13:42   30:00  python

2 个答案:

答案 0 :(得分:1)

如果您不担心 os.popen()

,那么这样的事情呢?
#!/usr/bin/python
import os
PROCNAME = "file1.py"
pids = []
for proc_data in os.popen('/bin/ps -eo pid,comm,args'):
    bits = proc_data.strip().split()
    (pid, comm ) = bits[0:2]
    args = " ".join( bits[3:] )
    if args == PROCNAME:
        pids.append( pid )

print pids

这可以让你找到基于过程的args的东西。

如果需要,您可以更改它以使comm和args成为一个字符串。

    pid = bits[0]
    comm_and_args = " ".join( bits[1:] )

答案 1 :(得分:0)

请阅读pidof

man pidof