我正在编写一个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
命令正在运行
sh -c prstat -p xxxx -a -s size
prstat -p xxxx
当我使用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
选项来到这里?
答案 0 :(得分:2)
只有一个prstat命令在运行#2,sh -c ..
进程是Python用来运行命令的shell。
编辑:
groovy_str
可能会有一个尾随换行符。