1.执行py文件生成进程的命令如下:
/data/anaconda3/envs/python_env36/bin/python /data/yzx/sale_predicts_allenv/rocketmq_file/task_consumer.py prod
2.未运行该文件,查看该文件相关进程:
可以看到含有一个pid为10754的查询进程,且该进程号随时变化,task_consumer.py文件并未运行
[root@node01 ~]# ps -ef|grep rocketmq_file/task_consumer.py
root 10754 3606 0 21:28 pts/0 00:00:00 grep --color=auto rocketmq_file/task_consumer.py
可以选择忽视掉查询进程,命令如下:
ps -ef|grep -v grep|grep rocketmq_file/task_consumer.py
3.运行该文件后,查看相关进程
可以看到,多了一个pid为6373的进程,该进程即task_consumer.py文件运行产生
[root@node01 ~]# ps -ef|grep rocketmq_file/task_consumer.py
root 6373 6281 1 21:19 pts/3 00:00:04 /data/anaconda3/envs/python_env36/bin/python /data/yzx/sale_predicts_allenv/rocketmq_file/task_consumer.py prod
root 7553 3606 0 21:24 pts/0 00:00:00 grep --color=auto rocketmq_file/task_consumer.py
4.删除查询得到的进程
获取查询得到的进程号,并删除相关进程(python进程会删除,grep查询进程依旧存在)
[root@node01 ~]# ps -ef|grep rocketmq_file/task_consumer.py |awk '{print $2}'|xargs kill -9
5.获取进程相关信息
import psutil
#获取pid对应的应用名
p = psutil.Process(PID)
print('Process name : %s' % p.name())
#获取进程bin路径
print('Process bin path : %s' % p.exe())
#获取pid对应的路径
print('Process path : %s' % p.cwd())
#进程状态
print('Process status : %s' % p.status())
#进程运行时间
print('Process creation time : %s' % datetime.datetime.fromtimestamp(p.create_time()).strftime("%Y-%m-%d %H:%M:%S"))
6.判断某python文件是否运行,如果未运行则启动
import subprocess as sb
# 筛选rocketmq_file/task_consumer.py相关进程(结果包含查询进程和可能正在运行的目标进程)
res = sb.getoutput("ps -ef|grep rocketmq_file/task_consumer.py")
print(res)
# 获取筛选进程对应的进程号,并转为list形式
pid_list = sb.getoutput("ps -ef|grep rocketmq_file/task_consumer.py |awk '{print $2}'")
print(pid_list.split())
# 如果查询到相关进程
if "rocketmq_file/task_consumer.py" in res and "python" in res:
print("process is running!")
else:
sb.getoutput("nohup /data/anaconda3/envs/python_env36/bin/python /data/yzx/sale_predicts_allenv/rocketmq_file/task_consumer.py prod &")
print("process is stop and start now!")
注意:sb.getoutput()函数运行py文件和python命令行形式输出有差异(命令行形式缺少一些输出)