目录
1.systemd管理的资源对象以“单元unit”为单位,“单元”分为3类
一、进程占用的内存资源
1.分配的内存、地址、空间;
2.安全属性,如进程的权限信息;
3.进程的状态、子线程和子线程的状态;
二、进程的系统环境
本地局部变量;
调度上下文;
分配系统资源,如网络端口
三、进程一直在切换
1.进程之间一直在切换(以时间片为单位),切换速度很快;
2.调度上下文:这个进程,最近一次切换前记录的状态
四、父进程和子进程
1.最顶级的父进程是systemd,类似于文件系统的"根目录/";
2.父进程通过fork方式复制自己的地址空间来创建子进程;
3.子进程有2个属性,pid是自己的唯一标识,ppid是父进程的pid;
4.父进程创建、回收子进程的过程

fork方式创建子进程后,父进程进入等待状态;
子进程执行;
子进程结束,释放相关的环境、资源,并向父进程发送回收信号。父进程调用wait()、waitpid()回收子进程环境、资源;
僵尸进程:是子进程结束这一步出现问题造成的。子进程其他的环境、资源都释放了除了pid,发送信号后pid就没被父进程回收。结果我们ps查看进程时,显示有这个进程号但没实际进程,就像僵尸一样;
孤儿进程:程序执行一般是子进程先结束然后父进程才结束。孤儿进程是指父进程先结束了,子进程还没结束,然后子进程自动移交给systemd统一管理了,此时的子进程就叫孤儿进程
五、进程状态

runnable:等待状态,即处于等待cpu调用的状态(电脑卡、负载高,就是因为CPU一直不调用,一直处于runnable状态,所以就表现为卡起了)
running:分2种状态,内核级别(要和硬件打交道:进程先调用内核接口,然后内核控制硬件)、用户级别
supend、resume:暂停、恢复
sleeping:等待用户输入、或等待数据返回的状态
exit:退出状态
zombie:僵尸状态

六、查看进程
1.ps -ef 列出所有进程
![]()
uid:用户名
pid:进程pid(1是systemd)
ppid:父进程(0是系统内核进程)
stime:进程从什么时候开始运行的
tty:哪个控制台创建的进程。?表示开机时就创建的进程
cmd:[]中括号引起来的是 系统内核进程
2.ps -lax 列出所有进程
![]()
pri:优先级
NI:nice值。值越大,优先级越高
VSZ:进程运行时申请的内存大小
RSS:实际运行的内存大小
STAT:进程当前状态(S—睡眠、Ss—进程为父进程且处于睡眠状态、SN—进程优先级很低且处于睡眠状态)/*第一个字符代表状态,后面为状态补充说明,N表示进程优先级很低,s表示进程为父进程,+表示为前台进程而非守护进程、还有很多状态,不知道含义,可以man ps,然后筛选出STAT去看*/
3.ps aux列出所有进程
![]()
TIME:进程总共占用cpu执行了多长时间(单位秒,0表示不足1秒,或者从创建后一直在等待没被调用过)
4.树形列出所有进程
ps -ef 、ps -wxf (树形显示父子进程,和他们的进程信息)、pstree (树形结构显示所有族谱进程)
pstree 【选项】【pid/user】
-c :线程也打印出来
- pid:只显示此pid的进程
- user:只显示此user的进程
七、作业job(又叫任务task)(用来查看管理进程)
1.查看作业、作业的进程
jobs -- 列出当前shell终端运行的作业(即程序或命令)
+代表最近一个运行的命令
-代表最近一个的运行的命令的上一个命令
显示当前终端所有作业的进程信息:ps j
2.后台(守护进程方式)运行作业
以后台(守护进程)方式运行作业:
sleep 5000 & --- 执行休眠5000秒这个作业,并且以守护进程的方式后台运行(命令最后加&符号代表以守护进程方式运行)
后台作业改成前台方式:
fg %【作业编号,最左边哪个括号括起来的数字】 ---比如:fg %3 #编号为3的作业
3.暂停、恢复作业
暂停作业并改为后台(守护进程)方式:ctrl+z
暂停状态改为运行状态:bg %3
![]()
4.nohup设置作业无法中断
设置作业进程无法中断:nohup sleep 5000 & --比如我关了当前终端,后台运行的sleep 5000 &属于当前终端的子进程,也应该会中断,但加了nohup就不会中断。如果sleep 5000 &命令有日志打印输出,会保存到当前路径的nohup.out文件里,cat nohup.out就能看到
八、信号(用来控制操作进程)
1.定义
信号指的是传递至进程的软件中断,信号向执行中的程序报告事件
2.来源
错误、或外部事件(如I/O请求、定时器过期),发送信号命令;
键盘输入
3.分类
终止(Term) :意外退出。导致程序立即终止(退出)
核心转储(Core) :正常退出并保存。程序保存内存映像(核心转储),然后终止
停止(Stop) :暂停。导致程序停止执行(暂停),再等待继续(恢复)
4.常见的信号

5.如何使用信号,来操作进程?
键盘输入方式:
Ctrl-z (暂停) ---stop 停止或等待恢复
Ctrl-c (中止) ---term 立即终止并退出
Ctrl-\ (核心转储) ---core 程序保存内存映像,然后终止
发送信号命令:
kill、killall命令可以向进程发送任何信号
(1)过滤筛选,查看进程
pgrep -l -u 【用户名】 #筛选出用户的所有进程
(1)操作单个进程kill
kill-l ---查看可以发送的信号
kill -【信号编码】 【进程PID】
(3)批量操作进程killall、pkill
killall -u 【用户名】 ----杀死用户的所有进程(进程的uid属性与用户一一对应)
pkill -u 【用户名】
pkill -U 【uid】 #杀死指定uid用户的所有进程
pkill -G 【gid】 #杀死指定gid组包含用户的所有进程
九、实时监控进程
top
1.前面部分打印结果:进程总体情况

16:47:08:当前系统时间
7:40:从开机到现在,系统运行的时长
1 users:当前登录系统的用户数量
load average:1.46,0.74,0.29:系统负载。第一个1.46是1分钟前到现在这段时间的负载平均值、第二个0.74是5分钟前的负载平均值、第三个0.29是15分钟前的负载平均值(“负载平均值/CPU物理核心数>1”表示系统繁忙负载高)
tasks:当前系统一共有多少进程
%CPU0:0.3us,0.3sy,0.0ni,99.3id,0.0wa,:第一个CPU物理核心使用情况。us用户进程占用0.3%、sy系统进程占0.3、ni?????、id表示计算CPU空闲进程的计算结果(数字是空闲百分比,数字越大CPU越空闲,负载越低)、wa是IO-wait的简称表示CPU等待磁盘的时间(数字越大磁盘越繁忙)、
%CPU1:第二个CPU物理核心情况
Mib Mem:内存
Mib Swap:内存交换
2.后面部分打印结果:每个进程详细情况

按cpu占用从大到小排序:按P ----存在CPU超过100%的情况,是因为可能有多个CPU(比如2个CPU都用完了就是200%)
按内存占用从大到小排序:按M
交互式操作进程:
- 先按k;
- 会提示输入进程pid号PID to signaL/kill [default pid = 1357]; ---默认pid是1357
- 输入要操作进程的pid,回车(按esc取消);
- 会提示输入指令信号编号Send pid 【pid号】 signal [15/sigterm]; ---默认是15,杀死进程
- 输入信号编号。比如输入15或者不输入,然后回车,就杀死该进程了(按esc取消)
退出top:按q
十、守护进程
守护进程又叫后台进程,终端关了仍在后台运行不影响。
(1)顶级守护进程systemd
新版本linux,都是systemd进程。是管理开机、关机、服务的一个进程 ##旧版本linux,是init进程(/sbin/init)
(2)systemd管理服务
1.systemd管理的资源对象以“单元unit”为单位,“单元”分为3类
- .servce服务单元
- .socket套接字单元 ###socket分为:主机间socket、文件socket(主机和文件间)
- .path路径单元
2.systemd通过systemctl命令管理“单元”
systemctl -t help ###查看帮助:有哪些单元类型是systemd可以管理的
systemctl ###查看后面可以跟哪些子命令
systemctl list-units-files ###查看所有已加载单元的状态
systemctl --failed --type=service ###查看失败的单元
systemctl status 【单元名+单元类型,如:newIO.socket】 ###查看单元状态
验证单元是否处于活动状态
systemctl is-active 【单元名+单元类型】
验证单元是否开机自启
systemctl is-enabled 【单元名+单元类型】
验证单元是否启动会失败,启动不了
systemctl is-failed sshd 【单元名+单元类型】
3.systemctl管理服务
服务是单元的一种类型
-
查看服务
systemctl --type=service ###查看所有已加载的服务
systemctl list-units-files --type=service ###查看所有已加载服务的状态
systemctl --failed --type=service ###查看失败的服务
systemctl status 【服务名】 ###查看服务状态
【打印结果】
【服务状态】
loaded:服务的配置文件已经加载完成
active(running):服务已启动,正由一个或多个进程运行
active(exited):已成功完成,进程已退出
active(waiting):服务已启动,进程睡眠中,等待某一事件触发
Inactive:未运行
enabled:开机自启
disabled:开机不自启(未设置引导启动)
static:不能单独启动该服务,必须由其他服务启动
-
查看服务依赖
systemctl list-dependencies 【服务名】 ###查看服务启动前,必须要先启动的其他依赖子服务有哪些
-
验证服务
验证单元是否处于活动状态
systemctl is-active 【服务名】
验证单元是否开机自启
systemctl is-enabled 【服务名】
验证单元是否启动会失败,启动不了
systemctl is-failed 【服务名】
-
操作服务
启动、停止、重启服务
systemctl start【服务名】
systemctl stop【服务名】
systemctl restart【服务名】
重新加载服务配置文件
systemctl restart 【服务名】 ###比如修改了tomcat的配置文件,立即生效,无需重启服务
设置服务开机不自启
systemctl disable 【服务名】--now ###加了--now会马上停止服务
设置服务开机自启
方式一:把“服务名.service”放到/etc/systemd/system/multi-user. target .wants/下 ###因为/etc/systemd/system/multi-user. target .wants/*.service系统开机都会自启
方式二:systemctl enable【服务名】 --now ###加了--now会马上启动服务
/*原理:执行该命令会在/etc/systemd/system/multi-user. target .wants/下创建一个叫“服务名.service”的软连接,指向真实“服务名.service”所在路径*/
屏蔽服务
systemctl mask【服务名】 ###屏蔽了之后服务就启动不了了
/*原理:在/usr/lib/systemd/system/或/etc/systemd/system/下创建一个“服务名.service”软连接,指向/dev/null */
解除服务屏蔽
systemctl unmask【服务名】 ###原理删除指向/dev/null 的软连接向/dev/null
-
系统服务文件存放位置
/usr/lib/systemd/system/存放内置的系统服务文件
/usr/lib/systemd/system/*.service、/usr/lib/systemd/system/xxxxx.want/*.service ###是“服务名.service”的软连接,指向真实“服务名.service”所在路径
/etc/systemd/system/存放我们自己创建编写的系统服务文件
/etc/systemd/system/*.service、/etc/systemd/system/xxxxx.want/*.service ###可以存放软连接指向真实“服务名.service”所在路径,也可以存放真实“服务名.service”
优先级:
/etc/systemd/system/下的服务软连接,优先级比/usr/lib/systemd/system/高;
/*如果都有指向同一“服务名.service”的软连接,/etc/systemd/system/下的软连接优先。比如:两个目录下都有mysqld.service,如果/etc/systemd/system/mysqld.service被屏蔽了,尝试重启服务,/usr/lib/systemd/system/mysqld.service仍然得不到执行。此时mysqld这个服务会启动不了*/
4.服务与进程
- 一个服务可以由一个或多个进程(程序)运行;
- 以d结尾的系统进程都是守护进程
查看进程对应的服务
systemctl status 【进程pid】
本文深入讲解Linux进程的各个方面,包括内存占用、系统环境、进程切换、父进程与子进程的关系、进程状态及查看方法。介绍了作业job的管理,如查看、后台运行、暂停与恢复,以及nohup命令。探讨了信号的定义、来源、分类和使用,以及如何通过kill命令发送信号。详细阐述了实时监控进程的top工具。最后,重点讨论了守护进程systemd,包括其作为顶级守护进程的角色,以及如何通过systemctl管理服务和单元。



464

被折叠的 条评论
为什么被折叠?



