相关概念
进程
可执行程序的运行态
可操作系统调度的基本单位
线程容器
本身包含指令、数据等资源
线程
进程中被执行的最小单元
cpu调度的基本单位
线程带有指令、数据等资源
常用进程管理命令
ps 进程列表快照
风格参数
unix风格参数:ps -ef
bsd风格参数:ps aux
gnu风格参数:ps --pid pidlist
相关使用
-
ps -ef:获得所有进程列表
-
ps aux:获得所有进程列表,并提供更多可用数据
-
ps --pid 进程号1 进程号2 xxx 进程号n:显示指定进程的信息
-
ps -o pid,ppid,psr,cmd,xxxx:指定输出
使用-m表示打印出对应进程下的线程
关于使用-o与标准输出参数的对应关系
CODE NORMAL HEADER %C pcpu %CPU %G group GROUP %P ppid PPID %U user USER %a args COMMAND %c comm COMMAND %g rgroup RGROUP %n nice NI %p pid PID %r pgid PGID %t etime ELAPSED %u ruser RUSER %x time TIME %y tty TTY %z vsz VSZ
5.进程信息字段说明UID:启动进程的用户
PID:进程的进程号
PPID:父进程进程号
C、%CPU:cpu使用率
STIME:进程启动时的系统时间
TTY:进程启动时终端设备,若与终端无关,则显示? 若为pts/0等,则表示由网络连接主机进程。
TIME:运行进程需要的累积CPU时间
CMD:启动程序名称或命令
%MEM:占用内存的百分比
VSZ:该进程使用的虚拟內存量(KB)
RSS:该进程占用的固定內存量(KB)(驻留中页的数量)
STAT:进程的状态
START:该进程被触发启动时间关于进程的状态如下:
D:无法中断的休眠状态(通常 IO 的进程)
R:正在运行可中在队列中可过行的
S:处于休眠状态
T:停止或被追踪
W:进入内存交换 (从内核2.6开始无效)
X:死掉的进程 (基本很少见)
Z:僵尸进程
<:优先级高的进程
N:优先级较低的进程
L:有些页被锁进内存
s:进程的领导者(在它之下有子进程)
l:多线程,克隆线程(使用 CLONE_THREAD, 类似 NPTL pthreads)
+:位于后台的进程组
top 交互式进程观测
top命令经常用来监控linux的系统状况,实时显示系统中各进程的资源占用情况。
具体使用可参考其他博主的文章:https://blog.csdn.net/yjclsx/article/details/81508455
kill killall 结束进程
结束top进程前
结束top进程后
fg 进程切换到前台
python demo.py 2 3 进程已挂起
执行fg命令后,前台重新执行了该命令
bg 进程切换到后台
通过 jobs 命令可以看到当前后台被停止的作业是 python demo.py 2 3,其编号是1,则如果要在后台可以执行,则可以通过命令bg实现,格式为:bg jobs命令时的编号(比如 python demo.py 2 3 为 1,则为 bg 1)
ctrl z 挂起进程
将 python demo.py 2 3 进程挂起,挂起后,python demo.py 2 3 进程都是T(停止)状态
注意:只有在前台的进程才能被挂起,后台进程是不会被挂起的
demo.py内容
import multiprocessing
import os
import sys
import threading
from time import sleep
def thread_demo(index):
while True:
print(f"thread_demo {index} pid={os.getpid()} thread_name={threading.current_thread().name}")
sleep(1)
def process_demo(index):
while True:
print(f"process_demo {index} pid={os.getpid()} thread_name={threading.current_thread().name}")
sleep(1)
def multi_thread(count):
for index in range(count):
thread = threading.Thread(target=thread_demo, args=[index])
thread.start()
sleep(1)
def multi_process(count):
for index in range(count):
process = multiprocessing.Process(target=process_demo, args=(index,))
process.start()
sleep(1)
if __name__ == '__main__':
process_count = int(sys.argv[1])
thread_count = int(sys.argv[2])
multi_process(process_count)
multi_thread(thread_count)
input()