如何用python得到当前运行的脚本的PID

如何用python得到当前运行的脚本的PID,第1张

保存为.py文件后 运行脚本在后面添加进程名称即可 比如:python proinfo.py qq 即可获取QQ的进程信息,注意不区分大小写

复制代码代码如下:

#-*- encoding:UTF-8 -*-

import os

import sys

import string

import psutil

import re

def get_pid(name):

process_list = psutil.get_process_list()

regex = "pid=(\d+),\sname=\'" + name + "\'"

print regex

pid = 0

for line in process_list:

process_info = str(line)

ini_regex = re.compile(regex)

result = ini_regex.search(process_info)

if result != None:

pid = string.atoi(result.group(1))

print result.group()

break

def main(argv):<br>name = argv[1]<br>get_pid(name)

if __name__ == "__main__":

main(sys.argv)

代码说明:

1.import psutil 需要安装,用于获取linux下进程列表

复制代码代码如下:

process_list = psutil.get_process_list() #获取进程列表

2.import re: python处理正则的模块

复制代码代码如下:

regex = "pid=(\d+),\sname=\'" + name + "\'" #组成string类型的正则表达式

ini_regex = re.compile(regex)#初始化正则表达式

result = ini_regex.search(process_info)#正则表达式匹配

result.group(0):匹配到的整个字符串的内容

result.group(1):匹配第一个()中的内容

看到句柄数这几个字,我猜可能是要windows下运行的?

可能答非所问,不过在linux下最好的用的莫过于psutil了,你可以通过进程名或pid很好的监控任意进程的系统占用情况,甚至进程建立的每个连接都能获取到

>>> import psutil

>>> psutil.pids()

[1, 2, 3, 4, 5, 6, 7, 46, 48, 50, 51, 178, 182, 222, 223, 224,

 268, 1215, 1216, 1220, 1221, 1243, 1244, 1301, 1601, 2237, 2355,

 2637, 2774, 3932, 4176, 4177, 4185, 4187, 4189, 4225, 4243, 4245,

 4263, 4282, 4306, 4311, 4312, 4313, 4314, 4337, 4339, 4357, 4358,

 4363, 4383, 4395, 4408, 4433, 4443, 4445, 4446, 5167, 5234, 5235,

 5252, 5318, 5424, 5644, 6987, 7054, 7055, 7071]

>>>

>>> p = psutil.Process(7055)

>>> p.name()

'python'

>>> p.exe()

'/usr/bin/python'

>>> p.cwd()

'/home/giampaolo'

>>> p.cmdline()

['/usr/bin/python', 'main.py']

>>>

>>> p.status()

'running'

>>> p.cpu_percent(interval=1.0)

12.1

>>> psutil.net_io_counters(pernic=True)

{'eth0': netio(bytes_sent=485291293, bytes_recv=6004858642, packets_sent=3251564, packets_recv=4787798, errin=0, errout=0, dropin=0, dropout=0),

 'lo': netio(bytes_sent=2838627, bytes_recv=2838627, packets_sent=30567, packets_recv=30567, errin=0, errout=0, dropin=0, dropout=0)}

从官方文档上copy了一部分出来,有没有碉堡了的感觉,快去翻一下文档吧,非常容易使用

任何一种编程语言,启动进程和关闭进程都是跟 *** 作系统相关的 *** 作,python中与 *** 作系统打交道的话,推荐使用os模块。

os.system() 函数可以启动一个进程,执行完之后返回状态码。

os.fork() 复制一个进程,如果是子进程返回0,如果是父进程返回子进程的pid,使用这个函数的时候,建议你学习一下linux编程的知识。

os.popen 以管道的方式创建进程。

os.spawnl 也可以创建进程,并能指定环境变量。

os.kill(pid, sig) 关闭一个进程,pid是进程号,sig是信号。与fork配合使用,例如你刚才用fork创建了一个子进程,它的pid是11990, 那么调用

os.kill( 11990, signal.CTRL_BREAK_EVENT)

就以ctrl+c的方式杀死了这个进程。

另外还有一个模块multiprocessing,这个模块封装了很多创建进程和进程间通信的 *** 作,可以让你发挥多核的威力。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7452367.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-05
下一篇2023-04-05

发表评论

登录后才能评论

评论列表(0条)

    保存