进程管理
每一个进程都由这几个段组成:
重要概念:Stack and Heap
栈(stack):是一个动态增长和收缩的段,有栈帧(stack frames)组成。系统会为每个当前调用的函数分配一个栈帧。栈帧中存储了函数的局部变量(所谓自动变量)、实参和返回值。
堆(heap):是可在运行时(为变量)动态进行内存分配的一块区域。堆顶端称为program break。
其自动向对方扩展。
其余部分具体可参见进程结构和内存布局
进程切换:上下文切换,环境切换,将一个要退出的现场保存到内核的数据结构中去
进程
进程号
内存空间
用户
父进程
CPU time
进程所拥有的常见状态
Uninterruptible sleep:不可中断的睡眠
需要调度的外部资源没有满足的时候
Interruptible sleep:可中断的睡眠
不需要任何IO资源
僵尸进程,内存泄漏的一种表现
僵死态
Init:所有进程都是它的子进程
父子关系
优先级关系
0-139:140个优先级,数字越小,优先级越高
100-139:用户可控制
0-99:内核调整的
优先级高:
1.获得更多的CPU运行时间
2.更优先获得运行的机会
进程命令
PID:进程号Process ID
ls /proc
Init:1
ps:Process state
SysV风格:-
BSD风格
a:所有与终端有关的进程
u:显示是哪个用户启动的
x:所有与终端无关的进程
一般使用 ps aux | head(显示所有包含其他使用者的行程)
进程的分类:
跟终端相关的进程
跟终端无关的进程
进程状态:
D:不可中断的睡眠
R:运行或就绪
S:可中断的睡眠
T:停止
Z:僵死
<:高优先级进程
N:低优先级进程
+:前台进程组中的进程
l:多线程进程
s:会话进程首进程
ps
-elF
-ef e显示环境变量 f 显示程序间的关系
-eF
ps -o PROPERTY1,PROPERTY2
ps -o pid,comm,ni
ps命令详解
显示与bash相关的进程
ps aux | grep "bash"
加了[]的进程表示为一个内核线程
进程状态:
Linux上进程的状态:
1运行(正在运行或在运行队列中等待)
2中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
3不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
4僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)
5停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)
pstree :显示当前系统上的进程树
pgrep:
pgrep -u root bash以root为属主运行的bash命令
pidof:根据进程或程序名查找其相关进程的ID号
top:
M:根据驻留内存大小进行排序
P:根据CPU使用百分比进行排序
T:根据累计时间进行排序
l:是否显示平均负载和启动时间
t:是否显示进程和CPU状态相关信息
m:是否显示内存相关信息
c:是否显示完整的命令行信息
q:退出top
k:终止某个进程
top
-d:指定延迟时长,单位是秒
-b:批模式
-n #:在批模式下,共显示多少批
进程间通信(IPC:Inter Process )
共享内存
重要的信号:
1:SIGHUP:让一个进程不用重启,就可以重读其配置文件,并让新的配置信息生效
2:SIGINT:Ctrl+c:中断一个进程
9:SIGKILL:杀死一个进程
15:SIGTEAM:终止一个进程,默认信号
指定一个信号:
信号号码:kill -1
信号名称:kill -SIGKILL
信号名称简写:kill -KILL
Vmstat:系统状态查看命令
每隔多少秒切换一次vmstat n
vmstat 1 5
每个1秒钟更新一次,只显示5次
Kill PID
-l 可以显示出所有进程的可用信号
killall COMMAND 杀死这个命令的所有进程
调整nice值:
调整已经启动的进程的nice值:
renice NI PID
在启动时指定nice值:
nice -n NI COMMAND
前台:占据了命令提示符
后台:启动之后,释放命令提示符,后续的操作在后台完成
jobs:查看当前系统后台的所有作业
作业号,不同于进程号
+:命令将默认操作的作业
-:命令将第二个默认操作的作业
fg:将后台作业调回前台
fg [[%]JOBID]
kill %JOBID
运行级别
完成系统健康状况检查
POST加电自检->BIOS(Boot Sequence)->MBR(bootloader,446Bytes)–>Kernel–>(ROOTFS)/sbin/init(/etc/inittab可以更改默认运行级别)
文件系统
进程管理
内存管理
网络管理
安全功能
驱动程序
根/所在的分区称为根文件系统rootfs
内核设计风格:
单内核:Linux (LWP轻量级进程)
核心(动态加载),ko(Kernel Object)
内核:/lib/modules/内核版本号命名的目录/
Vmlinuz-2.6.32
/lib/modules/2.6.32/
微内核:Windows,Solaris(线程)
ramfs把内存模拟成硬盘使用–>inittamfs
Chroot: chroot /PATH/TO/TEMPROOT [COMMAND]
vga模式,维护模式
运行级别:启动的服务不同
0-6
0:halt关机
1:单用户模式single user mode直接以管理员身份登入
2:multi user mode多用户模式,不启动NFS
3:multi user mode 文本模式,不启用图形界面
4:reserved 保留级别
5:multi user mode graphic mode启用图形界面
6:reboot 重启
详解启动过程:
bootloader(MBR)
LILO:LInux LOader
GRUB:Grand Unified BootLoader
Stage1:MBR
Stage1_5:识别文件系统
Stage2:/boot/grub/
grub.conf:我没找到
default=0 设定默认启动的title编号,从0开始
timeout=5等待用户选择的超时时长,单位是秒
splashimage =grub的背景图片
hidedenmenu隐藏菜单
title内核标题,或操作系统名称,字符串,可自由修改
root内核文件所在的设备,对grub而言,所有类型键盘一律hd,格式为(hd#,N):hd#,#表示第几个磁盘,最后的N表示对应磁盘的分区
kernel内核文件路径,以及传递给文件的参数
initrd ramdisk文件路径,安装操作系统最后一步生成的
boot单独分区和不单独分区访问目录不一样