linux进程 线程管理
linux 进程 线程管理
1.进程管理
1.什么是进程,什么是线程
1.1、什么是程序
安装包,编程代码都是程序
1.2、什么是进程
让应用程序运行起来 并提供某种服务的实例
例如 工厂是进程 进程是一个房子
1.3、什么是线程
实际干活的,线程是进程中处理具体事务的东西,一个进程中至少有一个线程,可以有多个线程
例如,流水线是线程 线程是房子里的具体家具等等
2.进程使用cpu的三种状态
就绪态:应用程序在等待cpu处理的状态
运行态:cpu正在处理应用程序的状态
阻塞态:cpu执行完,应用程序的状态
3.查看进程(ps)
ps 是获取当前系统进程
参数
-a :显示一个终端的所有进程
-u :选择有效的用户id或者是用户名
-x :显示所有终端的进程,同时显示各个命令的具体路径
一般一起使用 -aux 相同的参数组合还有 -ef
-ef 和-aux的区别
-ef:会打印出父级PID
-aux:会打印出cpu、内存的相关使用情况
[root@localhost ~]# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.4 43844 4160 ? Ss 14:33 0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0.0 0.0 0 0 ? S 14:33 0:00 [kthreadd]
root 4 0.0 0.0 0 0 ? S< 14:33 0:00 [kworker/0:0H]
4.PS详解
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.4 43844 4160 ? Ss 14:33 0:01 /usr/lib/systemd/systemd --
--------------------------------------------------------------------------------------------
USER :指的是运行当前进程的用户
PID :进程的编号 类似于人的身份证号
%CPU :cpu的使用率 (单位时间内占用了多少cpu),比如一分钟使用了0.5 使用率则为百分之五十
%MEM :内存的使用率 上面使用了百分之4
VSZ :应用程序向系统申请的内存(也叫虚拟内存)
RSS :应用程序实际使用的内存
TTY :应用程序正在使用的终端(?代表后台运行,也就是说不占用任何终端)
终端分为 tty:操作系统终端(虚拟机的黑命令窗口叫做操作系统终端 tty)
pts:虚拟终端(xshel链接上的就叫做虚拟终端 pts)
位置在: /dev/pts
开了几个虚拟窗口就有几个虚拟终端(从0开始)
pts/0 代表运行在第一个虚拟终端
pts/1 代表运行在第二个虚拟终端
以此类推
STAT :进程的状态
R 正在运行状态 正在使用cpu 可以先让pts/0先执行隔while true ,在另一个 ps-aux 发现pts/0状态变为Rs+
如果是用文件执行 ,状态变为R+
S 睡眠状态 也可以叫阻塞态(一直不使用cpu) pts/0 执行sleep 100 pts/1查看ps-aux
pts/0状态变为S+ 睡眠状态
D 不可中断睡眠,电脑死机的状态,只能重启
T 停止状态 一般捕捉不到
Z 僵尸进程(这块少东西)
X 死掉的进程(几乎看不见,死了立即回收)
< 标注了优先级较高的进程
N 标注了优先级较低的进程
s 包含子进程 pts/0 本来就是一个进程,如果在里面执行文件 会发现 pts/0 状态Ss ,得出s是子 进程, 文件是窗口的子进程
+ 表示在前台(就是指在命令行运行)运行的进程
l (小l) 多线程方式运行
| 代表多进程
nice : 设置进程优先级
-n -20到20 数字越大优先级越低
pts/0执行 nice -n -19 sleep 100 pts/1 查询 ps -aux pts/0 状态变为 S<+
pts/0执行 nice -n 19 sleep 100 pts/1 查询 ps -aux pts/0 状态变为 SN+
START :进程开始的时间
TIME :占用cpu的总时间
COMMAND :进程运行的命令
5.top命令(实时查看进程的命令)
1.基本参数
默认情况下三秒刷新一次
-d:指定刷新时间 例如 top -d 1 (指定几秒刷新一次)一秒刷新一次
-p:查看指定进程的信息 例如 top -p 1352(进程id)
-u:查看指定用户的进程 例如 top -d test (指定用户名)
-n:查看指定top次数的信息 例如 top -u test -n 2 (刷新次数)
-b:以批处理模式操作
2.整体统计信息
top - 17:02:20 up 2:28, 2 users, load average: 0.07, 0.04, 0.05
Tasks: 107 total, 1 running, 106 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0
KiB Mem : 995676 total, 807708 free, 107156 used, 80812 buff/cache
KiB Swap: 1572860 total, 1572860 free, 0 used. 772884 avail Mem
17:02:20:系统时间
up :启动状态 还有一个是down关闭状态
2:28:机器到现在开启了多长时间 2个小时28分钟
2 users: 当前系统两个用户登录(或者是活跃的用户个数)
load average: 0.07, 0.04, 0.05 :系统负载 单位时间内 使用cpu的情况 一分钟 五分钟 十五分钟
----------------------------------------------------------
Tasks: 107 total:当前系统中 总共有107个进程
1 running:当前系统中,有一个进程在运行态
106 sleeping:当前系统中 106个正在睡眠
0 stopped: 0个停止的进程数
0 zombie:0个死亡的进程
----------------------------------------------------------
%Cpu(s): 0.0 us:用户态的进程占用cpu的时间比,用户启动的进程占用cpu的百分比
0.3 sy:系统态(内核态)的进程占用cpu的时间比,,操作系统本身也是一个程序,系统启动的进程占用cpu的百分比
0.0 ni:优先级高的占用的cpu的百分比
99.7 id:空闲态
0.0 wa:cpu等待状态io的百分比
0.0 hi:硬件中断
0.0 si软件中断
0.0:被偷走的cpu的百分比
----------------------------------------------------------
KiB Mem : 995676 total: 系统内存 总共有995676个字节
807708 free:空闲内存807708个字节
107156 used:使用内存107156个字节
80812 buff/cache:缓存80812个字节
----------------------------------------------------------
KiB Swap: 1572860 total:内存不够,拿硬盘代替内存 总大小1572860字节
1572860 free:空闲的1572860字节
0 used:使用的 目前没使用的
772884 avail Mem :利用内存772884
---------------------------------------------------
total 总的
used 使用的
free 剩余的
shared 共享的
buff/cache 缓冲和缓存所占用的内存空间
6.top快捷键
M 按内存的使用排序 %MEM 最高的排在最上面
P 按CPU使用排序 %CPU 最高的在最上面
N 以PID的大小排序 PID 最大在最上面
R 对排序进行反转
f 自定义显示字段
1 这是英文l,显示所有CPU的负载
s 改变画面更新频率 Change delay from 3.0 to 1(输入多少秒刷新可以输入到0.x秒)
1 这个是数字一,查看所有cpu信息
m 改变内存的显示样式
h|?帮助
< 向前
> 向后
z 彩色
7、进程信号
1、什么是信号
操作系统告诉进程你该怎么做,做什么的一种沟通方式
2、kill 命令
发送信号的命令
kill -l查看系统所有信号 所有信号都带个SIG
[root@localhost ~]# kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
3、HUP信号 等同于 SIGHUP
3.1 更新进程的配置
kill -1 (信号的id)
#先启动nginx,然后过滤出进程的nginx
[root@localhost ~]# ps -ef | grep nginx
root 2174 1 0 19:08 ? 00:00:00 nginx: master process /usr/sbin/nginx
nginx 2175 2174 0 19:08 ? 00:00:00 nginx: worker process
root 2182 1829 0 19:09 pts/0 00:00:00 grep --color=auto nginx
#修改 user nginx; 改为user test;
[root@localhost ~]# vim /etc/nginx/nginx.conf
user nginx; user test;
#在过滤一下 发现UID还是没改
[root@localhost ~]# ps -ef | grep nginx
root 2174 1 0 19:08 ? 00:00:00 nginx: master process /usr/sbin/nginx
nginx 2175 2174 0 19:08 ? 00:00:00 nginx: worker process
root 2182 1829 0 19:09 pts/0 00:00:00 grep --color=auto nginx
#执行kill -1 进程PID
[root@localhost ~]# kill -1 2174
#在过滤发现修改成功
[root@localhost ~]# ps -ef | grep nginx
root 2174 1 0 19:08 ? 00:00:00 nginx: master process /usr/sbin/nginx
test 2186 2174 0 19:10 ? 00:00:00 nginx: worker process
root 2188 1829 0 19:10 pts/0 00:00:00 grep --color=auto nginx
4、INT、QUIT和TSTP 终止信号
#这三个必须使用快捷键
INT 等于ctrl + c 停止信号 -2 我让你自杀
QUIT 等于 ctrl+ / 终止进程 -3 我杀你
TSTP 等于 ctrl+z 中断信号 -20 把进程内存抽掉,断粮草
5、KILL和TERM 杀死信号
#是由命令发出来的
KILL :杀死信号,-9 立即中断 直接杀死(回收内存,强制剥离cpu)
TERM :终止信号 -15 优雅中断 终止信号
6、CONT和STOP 暂停和恢复
CONT 18 继续
STOP 19 暂停
7.打印当前进程PID
echo $$