目录
[一个正在运行的程序,一个程序运行至少要启动一个进程,主进程 子进程](#一个正在运行的程序,一个程序运行至少要启动一个进程,主进程 子进程)
[一个进程正常运行,至少要启动一个线程,主线程 子线程](#一个进程正常运行,至少要启动一个线程,主线程 子线程)
[ps aux (静态):](#ps aux (静态):)
[ps -ef (静态):](#ps -ef (静态):)
[pidof :查找服务进程的pid号码](#pidof :查找服务进程的pid号码)
进程
计算机四大存储资源:磁盘资源、内存资源、cpu资源、网络资源
一个正在运行的程序,一个程序运行至少要启动一个进程,主进程 子进程
速度:启动慢,结束慢
资源隔离
资源不共享
一个进程正常运行,至少要启动一个线程,主线程 子线程
速度:启动快,结束快
资源共享
线程的损坏会影响进程
进程的生命周期:
父进程复制自己的地址空间(fork)创建一个新的子进程结构
每个新进程分配一个,唯一的进程id(pid),满足跟踪安全之需
任何进程都可以创建子进程
所有进程都是第一个系统进程的后代
进程状态产生的原因:
在多任务处理操作系统中,每个cpu(或核心)在一个时间节点上只能处理一个进程
在程序运行时,他对cpu时间和资源分配的要求会不断变化的,从而为进程分配一个状态
它随着环境的要求而改变
查看当前系统的进程
ps aux (静态):
a 只能查看系统里面运行的所有终端进程
u 显示进程拥有者
x 显示系统内所有进程
f 显示进程之间的父子关系
需要提前安装:yum -y install psmisc
pstree:展示进程之间的父子关系
ps aux | grep 进程名 //查看指定进程的pid
进程字段解释,命令:ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
============================================================================
USER: //运行进程的用户
PID: //进程ID
%CPU: //CPU占用率
%MEM: //内存占用率
VSZ: //进程占用的虚拟内存大小。
RSS: //占用的物理内存大小
TTY: //进行运行的终端
STAT: //进程状态
START: //进程的启动时间
TIME: //进程占用CPU的总时间
COMMAND: //进程文件,进程名
进程状态:
?: 表示没有占用终端
R: 运行
S: 可中断睡眠 Sleep
D: 不可中断睡眠
T: 停止的进程
Z: 僵尸进程
X: 死掉的进程
Sl: 以线程的方式运行
Ss: s进程的领导者,父进程
R+: +表示是前台的进程组
S<: <优先级较高的进程
SN: N优先级较低的进程
查看tty的方法:
tty //进行运行的终端
? 表示这个进程开启的时候没有占用终端
ps -ef (静态):
-e 显示所有进程
-l 长格式显示
-f 完整格式
进程字段解释,命令:ps -ef
UID PID PPID C STIME TTY TIME CMD
=============================================================
UID //用户ID
PID //进程ID
PPID //父进程ID
C //CPU占用率
STIME //开始时间
TTY //开始此进程的终端设备
TIME //此进程运行的总时间
CMD //启动命令名
查看单个PID
pidof :查找服务进程的pid号码
pidof 进程名
pgrep:检索进程pid号码
pgrep 进程名
-d 设置号码之间的间隔符
-P 匹配父进程ID
查看进程端口
yum -y install lsof //下载lsof
lsof -i:端口号 //端口号,查看带端口的进程
注意:端口号只有整数,范围是从0 到65535
进程字段解释,命令:lsof -i:端口号
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
=============================================================
COMMAND 进程文件,进程名
PID 进程ID
USER 运行进程的用户
FD 文件描述符,应用程序通过文件描述符识别该文件。
DEVICE 指定磁盘的名称
SIZE/OFF 文件的大小
查看正在监听的端口
查网络进程和正在监听的端口:ss -nplt | netstat -lntp
-a 显示全部的进程
-u 显示udp
-n 以数字的新式显示协议名称
-t tcp
-p:显示进程的名称和pid
-l :只显示正在被监听的端口
进程字段解释,命令:netstat -lntp
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
==================================================================================
recv-Q:网络接收队列。表示收到的数据已经在本地接收缓冲,但是还有多少没有被进程取走,recv()如果接收队列Recv-Q一直处于阻塞状态,可能是遭受了拒绝服务 denial-of-service 攻击。
send-Q:网路发送队列。对方没有收到的数据或者说没有Ack的,还是本地缓冲区.如果发送队列Send-Q不能很快的清零,可能是有应用向外发送数据包过快,或者是对方接收数据包不够快。
Foreign Address:与本机端口通信的外部请求
PID/Program name:pid和进程名
动态查看进程
top:动态查看进程及内容使用情况
top //动态显示信息,三秒刷新一次
load average: 0.00, 0.01, 0.05 //平均负载:一分钟,五分钟,十五分钟
h|? 帮助
> 往下翻页
< 往上翻页
M 按内存排序
P 按cpu排序
q 退出
z 彩色显示
W 保存
标题参数解释:
第一行:程序名-系统时间 运行时间 登录用户数 CPU负载:1 5 15分钟
第二行:总线程数 运行数 睡眠数 停止数 僵死数
第三行: CPU使用占比 us用户 sy系统 ni优先级 id空闲 wa等待 hi硬件 si软件 st虚拟机
第四行:物理内存 total总共 free空闲 user使用 cache缓存硬盘内容
第五行:换分区 total总共 free空闲 user使用 cache缓存硬盘内容
------------------------------------
PID 用户 内存 共享内存 虚拟内存 状态 CPU占用 内存占用 运行时间 命令
进程优先级nice
nice 值越高:表示优先级越低,例如+19,该进程容易将CPU 使用量让给其他进程。
nice 值越低:表示优先级越高,例如-20,该进程更不倾向于让出CPU。
修改进程优先级
renice -n 需要修改的优先级数 进程名
进程控制
kill:杀死指定的进程
kill 进程号 杀死指定进程,高级别进程(终端)不能杀死
kill -9 进程号 强制杀死指定进程(往往用来杀死任务的干扰进程)
kill常用参数:
SIGTERM(信号15):这是kill命令的默认信号。它会请求进程终止,但是进程可以选择忽略这个信号。这是一个友好的终止信号,因为它允许进程有机会清理并优雅地关闭。
SIGKILL(信号9):这个信号会立即终止进程,进程无法忽略。这是一个强制终止信号,通常在SIGTERM无效时使用。
SIGINT(信号2):这个信号通常由用户通过按Ctrl+C发送,用于中断进程。
SIGSTOP(信号17,19,23):这个信号会立即停止进程的执行。进程无法忽略这个信号。
SIGCONT(信号18,20,24):这个信号会使被SIGSTOP停止的进程继续执行。
SIGHUP(信号1):这个信号通常表示终端已断开连接。许多守护进程会在接收到这个信号后重新读取配置文件。
SIGALRM(信号14):这个信号通常用于实现定时器或者超时功能。
pkill:进程名杀死指定进程
pkill 进程名 //根据进程名杀死进程
作业控制
jobs:
作业控制指的是控制正在运行的进程的行为。如:用户可以挂起一个进程或者放到后台去运行,等一会儿再继续执行该进程。
命令后+& //&:让命令或者程序后台运行
命令开始执行后 //ctrl+z 把程序放到后台(这方法会让程序在后台暂停)
jobs //查看后台的工作号
bg %工作号 //让暂停的程序在后台运行,%是用来修饰job number:工作号
fg %工作号 //将后台的程序调到前台
kill -9 %工作号 //通过kill杀死进程