主要内容:
1.Linux进程管理 2.作业控制
1.进程:系统资源分派的单位,每个进程都有相应的优先级.
进程优先级:
1.动态优先级:0-99,实时优先级
2.静态优先级:100-139, nice值-20到19 对应10-139
nice(优雅):愿意把自己的优先级降低。把nice值调为5,高于0,很优雅的把机会
让了别人,作为普通用户只能优雅别人,即把nice值调高,降低自己的优先级,而root
则可以随意优雅。
进程管理常用命令:
1. ps : 查看进程
-e 显示所有进程
a 表示所有跟终端'无关'的进程
x 表示跟终端有关的进程
u 显示进程由哪个用户发起的
常用组合 ps axu ; axjf 显示进程关系
-f 显示完整信息
-F 显示额外信息
常用组合 ps -ef
j :jobs format,作业形式
H 显示进程间关系
-o 自定只显示那些字段
例: ps -eo pid,$cpu,comm
查看 cupsd进程
ps aux | grep cupsd
-u pgrep -u 查看某个特定用户的进程 只显示PID
-G -G 显示某个特定组的进程
pidof 查看某个进程的PID号
top ::实时显示进程信息
-b : 显示几次退出
-n : 显示几次退出
-d : 指定间隔时间 s
free 查看内存信息-m 以m为单位显示大小
uptime : 系统运行时间 1分钟 ...
vmstat : 内存使用信息 例:vmstat 3 5 每三秒显示一次 只显示5次
pstree : 查看进程树
2.进程个字段意义:
PID:进程号 表示进程存储空间 task_structure
PPID: 父进程进程号
init: 所有进程的父进程 (上帝进程) 开机启动的第一个进程 进程号1swatped 0
VSZ:虚拟内存集
RSC:实际内存集 内存页4k
tty :与哪个终端相关
TIME :获得CPU时间的和
START 该进程被触发启动的时间
COMMAND: 由哪个命令发起的
inint (3) 3.表示四级别三
加[ ] 为内核线程
[pdflush]将内存数据同步到硬盘上
(32bit) 内存分为两段 第一段为1G 内核空间 ; 第二段3G 用户空间
STAT: 进程状态
R : 1.运行态 runing 2.就需态 ready
runing-->sleep 等待I/O--> ready< --> running
D : 不可中断睡眠 Uninterruptible sleep ,这个进程正在完成其他的操作 如I/O
S : 可中断睡眠 Interruptible sleep ,无可做的工作
T : 停止态
Z : Zombie(僵尸态) 特殊状态 执行结束后没释放内存
1.系统结束指令后 进程自清理 在释放内存前(父进程清理内存空间)
2.父进程kill后 子进程在结束后 无法清理内存
3.孤儿进程 父进程完成任务后 子进程委托给init
< :表示高优先级进程
N :表示低优先级进程
+ :跟某个前台进程相关,属于某个前台进程组的进程.
s :某个会话的leader进程
l :某个多线程的进程
(thread 比进程更轻量级的资源分配单位,共享内存,资源争用机制)
进程和线程的区别:
内核空间和用户空间的区别:(只有内核空间的程序才能操作硬件)
内核空间和用户空间打交道的方法:
1).系统调用
2).中断
进程间通信:IPC
共享内存机制:
信号
结束进程:
kill
1)管理后台作业kill:
kill -l 列出当前kill能使用的信号
-1 重读一次参数的设置文件
-2 等同于Ctrl+c
-9 突然让一个进程死掉
-15 让一个进程正常的死掉
-18 让停止的进程继续运行 (bg)
-19 让运行的进程停下来歇会儿 (ctrl+z)
kill -n (常用)如何向另外一个进程发送信号,后跟另一个进程的进程号
jobs 查看当前所有作业
eg:kill -9 %1 将作业1突然kill掉(强行)
kill -KILL(常用)
2)kill进程:
kill 进程号 (只能后跟进程号,把某个进程kill掉默认发送的是15信号)
eg:kill 2288
killall 进程名 (killall后跟进程名)
pkill SIGNAL pattern
作业控制:
完成一个特定任务的一组进程
工作机制:
前台 发起命令后如果尚未完成就一直占用shell
eg: cp -r /etc /tmp/abc
后台 发起命令后释放shell
eg: cp -r /etc /tmp/abc &
nohup cp -r /etc /tmp/cba & (表示不但把此作业送到后台,而且让其与终端无关
)
ctrl+z 把命令送到后台去(在后台处于停止状态)
& 把命令送到后台(在后台处于running状态)
fg 把后台的作业重新调到前台
bg 作业号 把命令处于后台并在后台运行 eg:bg %2
jobs 查看当前处在后台的所有作业,第一列为作业号
fg n 调回第n个作业