前言
本篇将简述的内容:Linux系统下的系统程序与进程管理
一、启动流程
1.开机自检的流程
正常开机
(一)power on开机
(二)POST开机自检,如果有问题会发出蜂鸣声,没有问题就加载bios程序
(三)bios是基本输入输出系统,通过BIOS加载引导程序
(四)boot启动顺序检查,启动第一启动顺序
选择硬盘作为第一启动顺序
(五)然后找到硬盘的第一个扇区,读取MBR主引导记录,MBR中有一个grub2引导程序,是用来启动Linux系统的
(六)加载/boot里文件系统里的驱动
(七)运行/boot里的内核文件vmlinuz、initramfs
(八)启动systemd进程
#系统的第一个进程,是所有其他进程的父进程
(九)启动对应的运行级别的里的服务,我们一般是启动multi-user多用户模式
(十)启动相应运行级别的的服务,比如/etc/rc.local以及/etc/fstab文件
(十一)然后进入login登录,用户输入用户名和密码以后,Linux系统会自动进入/etc/passwd文件和/etc/shadow文件里验证用户名和密码是否正确
(十二)验证成功之后,运行/etc/profile和 /etc/bashrc 全局配置(所有验证成功的用户都会加载),再运行用户家目录下的初始化文件, /.bash_profile、/.bashrc 局部配置(只有用户本身可以加载)
二、管理机制
1.service命令
Linux6及之前老版本系统
语法
service 服务名称 服务操作类型
服务启停脚本存储目录:
/etc/init.d/
2.systemd命令
Linux7及之后的新版本系统
语法
systemctl 服务操作类型 服务名称
服务启停脚本存储目录:
/usr/lib/systemd/system
三、运行级别
查看运行级别的命令
runlevel
init
systemctl:
systemctl get-default
查看默认运行级别
systemctl set-default 运行级别名称
查看默认运行级别
四、故障处理
1.遗忘密码,root密码修复
使用修改grub参数方法
(一)启动系统后,在grup界面按e进入编辑模式 (二)Linux 16 的那一行,将 ro 改为 rw init=/sysroot/bin/sh (三)Ctrl+x (四)chroot /sysroot (五)修改root用户密码 (六)passwd 或者echo "密码" |passwd --stdin root (七)touch /.autorelabel #自动识别label标签 #不创建密码修改不生效 (八)exit (九)reboot
2.文件系统损坏
模拟故障:dd if=/dev/zero of=/dev/sdb1 bs=512 count=4
(一)centos7下的XFS文件系统修复:
umount /dev/sdb1 xfs_repair /dev/sdb1
(二)centos7下的ext文件系统修复:
umount /dev/sdb1 fsck -y -t ext4 /dev/sdb1
3.grub引导故障
故障模拟
mv /boot/grub2/grub.cfg /grubbackup ; reboot
修复(手动引导操作系统)
(一)grub>ls #查看磁盘分区信息,找到boot分区
(二)grub>insmod xfs
(三)grub> set root=(hd0,msdos1) (----> 这个为你上一步中找到的boot分区)
(四)grub> linux16 /vmlinuz-xxxx root=/dev/mapper/centos-root
(五)grub> initrd16 /initramfs-.xxxxx.img
(六)grub> boot
(七)将备份好的gurb文件拷贝到/boot/grub2/目录中。
或者 在没有备份grub的情况下: grub2-mkconfig --output /boot/grub2/grub.cfg 重新生成grub
4.磁盘资源耗尽
(一)磁盘空间不足
清理磁盘或者添加新磁盘
(二)inode节点耗尽
查看磁盘inode节点数量:df -i
删除无用文件
(三)预防磁盘资源耗尽的最好办法
进行磁盘配额
五、程序与进程的区别
程序:静态代码,存储在硬盘等介质中
进程:程序运行后在CPU及内存中运行的动态代码;父进程与子进程;
六、程序与进程操作
1.查看进程
(一)ps aux命令
ps aux,静态显示正在内存中运行的进程信息
USER PID %CPU %MEM VSZ RSS TTY STAT STARTTIME COMMAND
用户 进程号 %CPU 内存占比 虚拟内存 固定内存占用 连接终端 状态 开始时间 进程运行的命令
状态:
S:sleep休眠进程 s:表示有很多子进程,表示父进程 R:正在工作的进程 T:已经停止的进程 Z:僵尸进程,zombie,会占用系统资源,主要占用内存资源 < high-priority (not nice to other users) N low-priority (nice to other users) L has pages locked into memory (for real-time and custom IO) s is a session leader l is multi-threaded (using CLONE_THREAD, like NPTL pthreads do) + is in the foreground process group
(二)ps -elf命令
ps -elf,属于当前登录的所有进程信息
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
标识 状态 用户ID 进程ID 父ID CPU 优先权 N优先权修正 内存位置 内存占比 运行 开始时间 TT终端 占用CPU时间 命令
(三)pgrep 命令
pgrep ,进程筛选
选项
-o:显示找到的最小进程号
-n:显示找到的最大进程号
-l:显示进程名
-p:指定父进程
-g:指定进程组
-t:指定开启的终端
-u:指定进程有效用户
案例
pgrep -l httpd -u apache
(四)pstree命令
pstree 显示进程树
-a:显示完整信息 -u:显示UID -p:显示PID号
(五)top命令
top,动态显示进程信息
top - 19:40:26 up 2:34, 5 users, load average: 0.42, 0.22, 0.16
系统当前时间;已经运行了16天21小时,1个用户登录;系统1/5/15分钟之内的平均负载
Tasks: 209 total, 2 running, 207 sleeping, 0 stopped, 0 zombie
Tasks(总进程数是145);2个正运行的进程;143个睡眠的进程;0个停止;0个僵尸进程
%Cpu(s): 14.0 us, 3.8 sy, 0.0 ni, 82.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
CPU(用户控件占用CPU的百分比是99.8%),内核占用CPU0.1%;0.0%ni[用户进程空间内改变过优先级的进程占用CPU百分比];0.2%id[空闲CPU百分比], 0.0%wa[等待输入输出的CPU时间百分比]
KiB Mem : 997956 total, 73544 free, 732792 used, 191620 buff/cache
Mem(内存)总大小是4G;2.4G被使用;1.6G空闲;158M作为内核缓存(buffer:写入缓冲区)
KiB Swap: 2097148 total, 1904892 free, 192256 used. 71360 avail Mem
Swap(交换分区)总大小5G;用了56k;其余闲置;2G作为读取缓存(cached:CPU刚使用的数据)
2.终止进程
Ctrl+C #终止前台进程
kill 进程号 #终止后台进程;-u指定用户
kill 'pgrep firefox' #不关心进程号直接杀死firefox
kill -9 进程号 #强制杀死
pkill 名字 #按照进程名杀死进程
killall httpd #使用进程名杀死一组进程;-l不区分大小写;-u指定杀死用户的进程
3.前台进程与后台进程
前台进程:在终端中直接运行的程序,影响当前终端的使用
后台进程:在后端运行的程序,不影响当前终端使用
前台进程切换成后台进程:firefox &
查看切换到后台的进程信息:
jobs [-l 显示PID] [1]+ 运行中 firefox &
jobNumber 状态 进程名
后台进程调到前台进程:fg jobNumber
暂停前台进程:Ctrl+z
将暂停进程直接调到后台执行:bg jobNumber
总结
总的来说,Linux系统下的系统程序与进程管理是操作系统中至关重要的一部分。了解和掌握进程管理的相关知识和命令,能够帮助用户有效地监控和管理系统中的进程,提高系统的稳定性和性能。