1.进程的管理:
当我们运行一个程序,那么我们将该程序叫进程
进程 线程 协程
linux起服务会有给这个服务预分配的内存结构, windows没有
2.为什么要学进程管理?
为了管理架构的服务
3.程序和进程的区别
1)程序:开发写出来的代码,程序是永久存在的。
2)进程:它会随着程序的终止而销毁。
4.进程的生命周期
1.当父进程接收到任务调度时,会通过fork派生子进程来处理,那么子进程会继承父进程的衣钵。
2.子进程在处理任务代码时,父进程会进入等待的状态...(等待子进程给父进程返回结果)
3.如果子进程在处理任务过程中,父进程退出了,子进程没有退出,那么这些子进程就没有父进程来管理了,就变成了僵尸进程。
4.每个进程都会有自己的PID号,(process id)子进程则PPID
5.进程管理命令(静态管理):ps
a:显示所有与终端相关的进程
u:显示用户
x:显示所有与终端无关的进程
#用户 USER #进程号 PID #占CPU的百分比 %CPU #占内存的百分比 %MEM #虚拟内存 VSZ #物理内存 RSS #该进程在哪个终端运行 TTY tty1: 物理机的终端 pts/0: 远程连接的终端 ?: 内核运行的终端 #状态 STAT S:进入睡眠状态的进程 (等cpu处理完成或等待cpu处理) s:父进程 R:正在运行的进程 D:不可中断的进程 (比如磁盘IO无法终端, 除非kill -9强行杀死) N:优先级低 <:优先级高 l:多线程的 +:在前台运行的进程 T:暂停,停止的进程 Z:僵尸进程 ---------------------------- L:页被锁进内存 |:多进程的 #进程启动时间 START #进程使用CPU的时间 TIME #程序运行的命令 (方括号包着的是内核的进程) COMMAND
进程相关的命令:
1.按照某一列排序:
[root@oldboyedu ~]# ps aux --sort vsz
2.指定想查看的列 # o: 指定想要看到的列
[root@oldboyedu ~]# ps axo user,pid,vsz,command [root@oldboyedu ~]# ps axo pid,nice,command # nice优先级
3.查看子进程 # f: 查看子进程
[root@oldboyedu ~]# ps auxf |grep [n]ginx # 本质上,相当于进程中有一个grep [n]ginx,但是查询的时候是,grep nginx(正则表达式的结果) root 119884 0.0 0.1 125108 2256 ? Ss 10:06 0:00 nginx: master process /usr/sbin/nginx nginx 119885 0.0 0.1 125496 3140 ? S 10:06 0:00 \_ nginx: worker process # 有脐带\_, 就是子进程 nginx 119886 0.0 0.1 125496 3140 ? S 10:06 0:00 \_ nginx: worker process nginx 119887 0.0 0.1 125496 3140 ? S 10:06 0:00 \_ nginx: worker process nginx 119888 0.0 0.1 125496 3140 ? S 10:06 0:00 \_ nginx: worker process
4.额外命令:pstree
查看进程树: [root@oldboyedu ~]# pstree systemd─┬─NetworkManager───2*[{NetworkManager}] ├─VGAuthService ├─abrt-watch-log ├─abrtd ├─agetty ├─auditd───{auditd} ├─crond ├─dbus-daemon───{dbus-daemon} ├─irqbalance ├─master─┬─pickup │ └─qmgr ├─nginx───4*[nginx] ├─polkitd───6*[{polkitd}] ├─rsyslogd───2*[{rsyslogd}] ├─sshd─┬─sshd───bash───pstree │ └─sshd───bash───bash───bash ├─systemd-journal ├─systemd-logind ├─systemd-udevd ├─tuned───4*[{tuned}] ├─vmtoolsd───{vmtoolsd} └─vsftpd
pgrep
#默认不加选项是查看进程的pid pgrep(了解)
[root@oldboyedu ~]# pgrep -l -a nginx [root@oldboyedu ~]# pgrep sshd # 展示pid 119346 120226 120254 [root@oldboyedu ~]# pgrep -l sshd # 追加名字 119346 sshd 120226 sshd 120254 sshd [root@oldboyedu ~]# pgrep -l -a sshd # 追加命令 119346 /usr/sbin/sshd -D 120226 sshd: root@pts/0 120254 sshd: root@pts/1 [root@oldboyedu ~]# pgrep -u root # 以root用户运行 -a:查看进程的运行命令 -l:查看进程名字 -u:指定用户
pidof
[root@oldboyedu ~]# pidof sshd # 列出pid 120254 120226 119346 [root@oldboyedu ~]# pidof nginx|xargs -n 1 kill -9 # 通过pidof名直接杀掉进程, xargs -n竖着排序, 一行显示几个 [root@oldboyedu ~]# pidof nginx|xargs kill -9 # 通过pidof名直接杀掉进程
5.top命令 (htop命令可以点击)
第一行内容: 当前系统时间 服务器运行时间 有3个用户在登录 top - 10:54:23 up 1 day, 17:56, 3 users, #平均负载(系统包含cpu和io) load average: 0.00, 0.01, 0.05 第二行内容: 总共122个任务 1个正在运行(R) 121个进入睡眠状态的(S) 没有停止(T) 0个僵尸进程(Z) Tasks: 122 total, 1 running, 121 sleeping, 0 stopped, 0 zombie 第三行内容: 用户态 内核态 优先级 cpu空闲 等待进程占用cpu(wait) 硬中断(硬中断请求占cpu百分比) 软中断(软中断请求占cpu百分比) 虚拟机占用物理机CPU的百分比 %Cpu(s): 0.1 us, 0.1 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st 用户态: 用户进程占cpu多少 linux上可以用的虚拟机软件: kvm,virtualbox 硬中断和软中断在企业中不用看这两个值 第四行:内存 缓冲区/缓存区 KiB Mem : 2028116 total, 150780 free, 144108 used, 1733228 buff/cache 第五行:swap虚拟内存 KiB Swap: 2097148 total, 2097148 free, 0 used. 1645080 avail Mem 第六行: 进程号 用户 优先级 虚拟内存 物理内存 共享内存 状态 占CPU的百分比 占内存的百分比 PID USER PR NI VIRT RES SHR S %CPU %MEM 运行时间 进程的运行命令 TIME+ COMMAND
top命令使用
-d:指定刷新时间 # top -d 1 -p:指定pid # top -p 122252 查看pid为122252的进程 top -p 122252,122253 查看2个pid进程 -u:指定用户 # top -u root 查看用户为root的进程 -b:保存到文件中 # top -d 1 -u postfix -b -n 2 > /tmp/top.txt 将2次显示的信息保存到top.txt -n:指定次数 z:高亮显示 # 按一次高亮显示,再按一次退出高亮 b:运行的进程,高亮显示 1: 显示各个cpu使用情况 # 初始是显示所有cpu的平均情况 s:修改刷新时间 M:按照内存排序 P:按照CPU排序 R:倒叙 f:自定义显示字段 # 然后按空格选择是够要显示该列, 按q退出 q:退出 k: 杀进程 # 输入pid, 输入信号9
中断
中断:硬中断
中断是系统用来影响硬件设备请求的一种机制,它会打断进程的正常调度和执行,然后调用内核中的中断处理程序来影响设备的请求
硬中断执行过程中,无法再次接收硬中断请求处理
软中断:
事实上,为了解决中断处理程序执行过长的和丢失中断的问题,Linux将中断处理过程分成了两个阶段:
第一阶段:用来快速处理(硬中断)中断,它在中断禁止模式下运行,主要处理跟硬件紧密相关工作
第二阶段:用来延迟处理第一阶段未完成的工作,通常以内核线程的方式运行。
kill信号管理:
1:重新加载 (不结束进程, 重新加载配置文件) 2:类似于ctrl + c 3:正常终止进程(让进程退出) # nginx等停止都是用该信号 9:强制杀死(少用)(nginx主进程杀死,子进程还在变为僵尸进程) 15:默认信号,进程终止 # kill 122529默认为信号15 ------------------------------------- 18:重新唤起停止的进程 # kill -18 82083 19:直接暂停 # kill -19 82083 20:把进程放到后台并暂停
pkill
-t:指定终端(杀掉终端运行的命令) (tty查终端名字,w查终端的号) # pkill -t pts/2 -9:强制,把终端运行的命令和终端一并杀掉 # pkill -9 -t pts/2
killall
接进程的名字 # killall mysqld, killall sshd (因为程序是后台守护进程的方式启动,所有名字后有d)
标签:oldboyedu,sshd,pkill,中断,nginx,监控,进程,root From: https://www.cnblogs.com/ludingchao/p/17406379.html