进程号
一台计算机上面会运行很多进程,微信、QQ、office…,为了方便区分和管理这些进程,操作系统会给每一个进程分配一个进程号(pid号),也就是process_id。mac或者Linux查看计算机所有正在运行的进程号使用:ps aux
;windows使用tasklist
映像名称就是进程名,PID对应的就是进程号
查询子进程
方法一
使用``multiprocessing的
current_process`模块
from multiprocessing import Process, current_process
import time
def task():
print(f'{current_process().pid}任务执行中')
time.sleep(100) # 沉睡100s,可以去命令行查询
if __name__ == '__main__':
p = Process(target=task)
p.start()
print('主进程')
运行之后,可以使用命令行去查询这个进程:
-
Windows:
tasklist | findstr pid号
-
Mac和Linux:
ps aux | grep pid号
方法二
使用os
模块的getpid()
不仅可以简单的获取pid号,还可以使用getppid()
获取当前进程的父进程号
from multiprocessing import Process
import time
import os
def task():
print(f'{os.getpid()}任务执行中') ## 获取当前进程号
time.sleep(100) # 沉睡100s,可以去命令行查询
if __name__ == '__main__':
p = Process(target=task)
p.start()
print('主进程')
查询父进程
使用getppid()
获取当前进程的父进程号
思考:最后一行代码打印的进程号是什么
from multiprocessing import Process, current_process
import time
import os
def task(name='子进程'):
print(f'{name}{os.getpid()}执行中')
print(f'{name}{os.getpid()}的父进程{os.getppid()}执行中')
if __name__ == '__main__':
p = Process(target=task)
p.start()
print(f'主进程{os.getpid()}正在执行')
print(f'主进程{os.getpid()}的父进程{os.getppid()}是哪个进程呢?')
答案是pycharm,因为是pycharm创建了这个python文件
杀死进程
使用p.terminate()
杀死当前进程,使用p.is_alive()查看进程是否存活
from multiprocessing import Process
import time
import os
def task():
print(f'{os.getpid()}执行中') # 获取当前进程号
# time.sleep(100)
if __name__ == '__main__':
p = Process(target=task)
p.start()
p.terminate()
time.sleep(0.001) # sleep一会,因为运行p.terminate()时pythpn并不会直接杀死进程,而是向系统发起调用,所以sleep一会再去判断才会杀死进程
print(p.is_alive())
print('主进程')
如果你打印的是True,是因为你的电脑太慢了,可以更换电脑或者sleep更久一点