Python中文
首页
教程
问答
标签
搜索
登录
注册
遍历进程列表以检查Python子进程是否存在PID
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我正在创建一个Python程序,每小时监视一次服务器上的进程,看看它是否可以返回PID。为此,我创建了一个函数,该函数使用subprocess对提交给它的任何名称调用pgrep-f。如果返回一个进程,函数的计算结果为true;否则,它将返回false</p> <pre><code>import subprocess import psutil def check_essentials(name): child = subprocess.Popen(['pgrep', '-f', name], stdout=subprocess.PIPE, shell=False) response = child.communicate()[0] pid = response.split() if len(pid) == 0: print("unable to find PID") return False else: print("PID is %s" % pid) return True essentialApps = ['ProfileService','aflaf'] sendEmail=False for x in essentialApps: check_essentials(x) if check_essentials == False: print("Unable to find PID for %s. Sending email alert" % x) sendEmail = True else: print("Found PID for %s" % x) </code></pre> <p>然后,我设置了一个for循环,让它遍历一个进程名列表(<code>essentialApps</code>),并查看它是否可以为它们返回任何内容。否则,sendEmail将设置为true</p> <p>然而,在测试过程中,我发现无论应用程序是否存在,else语句总是被调用。当我调用这个程序(<code>python alert.py</code>)时,我得到以下输出:</p> <pre><code>PID is [b'11111'] Found PID for ProfileService unable to find PID #This is expected Found PID for aflaf #This should be "Unable to find PID for aflaf" </code></pre> <p>我相信这很简单,但是有人能告诉我为什么它不能正确地评估check_-essential吗</p> <p>另外,psutil是否也可以这样做?我读到这应该在子进程上使用,但我找不到任何方法来专门模拟<code>pgrep -f name</code>或<code>ps -aux | grep name</code>。这很重要,因为我有多个Java应用程序在机器上运行,psutil似乎看到的程序名总是“Java”,而不是“ProfileService”</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>您没有使用函数的结果,而是检查<code>check_essentials</code>函数本身是否为<code>False</code></p> <p>它不是,因为它是一个函数</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
plt.savefig不会覆盖现有文件
10 回答
plt.savefig不保存图像
5 回答
plt.savefig在jupyter笔记本中不起作用
3 回答
plt.savefig在从另一个fi调用时停止工作
7 回答
plt.savefig在调用plt.show之前保存空数字
3 回答
plt.save不创建png文件
10 回答
plt.scatter overlay分类数据帧列
6 回答
Plt.Scatter:如何添加title、xlabel和ylab
5 回答
plt.scatter()绘图与Matplotlib中的plt.plot()绘图类似
9 回答
plt.scatter错误'NoneType'对象在成功运行后没有属性'sqrt'
8 回答
plt.set_title()中的标题字符串有误
7 回答
plt.show()
2 回答
plt.show()不在Jupyter笔记本上渲染任何内容
2 回答
plt.show()不打印plt.plot only plt.scatter
8 回答
plt.show()不显示三维散射图像
7 回答
plt.show()不显示任何内容
3 回答
plt.show()不显示数据,而是保留它供下一个图表使用(spyder)
2 回答
plt.show()使终端挂起
6 回答
plt.show()无法使用此代码
4 回答
plt.show()没有打开新的图形风
7 回答