从'os.system'调用python调用时,启动了两个'prstat'命令

时间:2013-12-02 11:58:58

标签: python shell solaris

我正在编写一个python脚本来监视进程。 我有prstat命令来获取该过程的详细信息。

我写了以下代码:

        #!/usr/bin/python
        import os,sys,re,time
        import subprocess
        def daemonize():
                pid = os.fork();
                if (pid < 0):
                        print "Forking error... exiting..."
                        sys.exit();
                if (pid > 0):
                        sys.exit()
                else:
                        print "Forking 1 success..."
                        pid = os.fork()
                        if (pid < 0):
                                print "Forking 2 error... exiting..."
                                sys.exit();
                        if (pid > 0):
                                sys.exit();
                print "Forking 2 success..."
        daemonize ()

    proc=subprocess.Popen('ps -ae | grep bulk', shell=True, stdout=subprocess.P
    IPE, )                                        //process bulk fork new process p1
    output=proc.communicate()[0]
    pid = output.split()                          // pid= pid of the process 'bulk' 
    proc=subprocess.Popen('pgrep -P ' +str(pid[0])+'', shell=True, stdout=subpr
    ocess.PIPE, )
    groovy_proc =proc.communicate()[0]            // groovy_proc -pchild process of 'bulk' need to be monitor
    os.system('prstat -p '+str(groovy_proc)+' -a -s size 2 5 >> /root/perf-stats/perf-logs/prstat.txt &') #TODO: two 'prstat' processes started,why?

当我运行此脚本时,我可以看到两个prstat命令正在运行

    正如我在python脚本中给出的
  1. sh -c prstat -p xxxx -a -s size
  2. prstat -p xxxx
  3. 当我使用os.system('prstat -p xxxx -a -s size 2 5 >> /root/perf-stats/perf-logs/prstat.txt &')运行上面的代码时,我得到唯一的prstat -p xxxx -a -s size命令。

    因此添加str(groovy_proc)会破坏脚本。这里出了什么问题?

    所以这就是为什么这个命令2存在的原因。为什么sh -c选项来到这里?

1 个答案:

答案 0 :(得分:2)

只有一个prstat命令在运行#2,sh -c ..进程是Python用来运行命令的shell。

编辑:

groovy_str可能会有一个尾随换行符。