Unix & Linux笔记(17)
2016-05-29 19:07
232 查看
第26章 进程和作业控制
26.1 内核管理进程的方式
进程=加载到内存中准备运行的程序+程序所需的数据+跟踪管理程序状态所需的各种信息进程ID
process id(
PID)
进程表
process table
调度器
scheduler
26.2 进程分叉到死亡
系统调用(200~300)
几个和进程、I/O有关的重要系统调用
进程控制 | - |
---|---|
fork | 创建一个当前进程的副本,几乎完全一样 |
wait | 强制该进程暂停直至另一进程结束 |
exec | 改变进程运行的程序 |
exit | (退出)终止进程 |
kill | - |
文件I/O |
---|
open |
read |
write |
close |
echo $$ 显示当前shell的PID
父进程
parent process(
parent)
子进程
child process(
child)
僵进程
zombie
死亡
die/terminate
26.3 孤儿进程和废弃进程
#1进程
init进程 收养
26.4 区分父进程和子进程
子进程返回值0婴儿状态
父进程返回值 新建进程的
PID方便收尸
26.5 第一个进程:init
#0空闲进程(
idle process) 第一代创世神(被否认存在)
#1初始化进程(
init process)
26.6 前台进程与后台进程
后台进程:命令末尾键入&
前台进程:
fg
26.7 创建延迟:sleep
sleep interval [s|m|h|d]
26.8 作业控制(一个shell
特性)
异步进程 asynchronous process
1. 默认标准输入与
/dev/null相连
2. 不响应
intr和
quit信号
作业控制的本质特性就是将输入每条输入的命令视为一个作业,该作业由一个唯一的作业号标志。
8个作业控制命令
命令 | 作用 |
---|---|
jobs | 显示作业列表 |
ps | 显示进程列表 |
fg | 将作业移至前台 |
bg | 将作业移至后台 |
suspend | 挂起当前shell |
^Z | 挂起当前作业 |
kill | 向作业发送信号;默认终止作业 |
echo $$
显示当前shell的PID
echo $!
显示上一条移至后台命令的PID
进程 | 作业 |
---|---|
进程是正在执行或准备执行的程序 | 解释整个命令行所需的全部进程 |
内核控制 | shell控制 |
进程表 | 作业表 |
26.9 在后台运行作业
[1] 4003 作业号#1 进程号
完成后通知:
set -o notify
26.10 挂起作业
作业的三种状态:前台运行;后台运行; 挂起;
^Z
susp进程挂起
fg移至前台
26.11 挂起shell
:suspend
26.12 作业控制与多窗口
26.13 显示作业列表:jobs
26.14 将作业移至前台:fg
命令 | 作用 |
---|---|
fg % fg % fg %+ fg %% | 当前作业 |
fg %- | 前一个作业 |
fg %n | 作业#n |
fg %name | - |
fg %?name | - |
26.15 将作业移至后台:bg
26.16 学习使用ps
程序
ps(
process status)
UNIX选项 (POSIX选项) BSD选项 GNU选项
26.17 ps程序:基本技能
ps –e (everything) ps –f (full output)
26.08 ps程序:选择选项(ps –ef
)
26.19 ps程序:状态(ps –ly
)
S列:
D不可中断睡眠(通常是等待
I/O)
R正在运行或可运行
S可中断(等待事件结束)
T挂起
Z僵进程
每当使用
ps时,所查看到的是一瞬间的快照。
26.20 监视系统进程:top
、prstat
top [-d delay] [-n count] [-p pid]
26.21 显示进程树:pstree
、ptree
大多数第三代进程都是守护进程,主要任务就是等待。pstree [ -aAcGnpu ] [ pid ] [ userid ] pstree -np -n Sort processes with the same ancestor by PID instead of by name. (Numeric sort.) -p Show PIDs.
26.22 思考Unix如何组织进程和文件:fuser
fuser
列举所有正在使用一个给定的文件的进程。
26.23 杀死进程:kill
kill终止进程 向进程发送信号
kill [ -9 ] pid… | jobid…
kill -9
杀死进程,并不允许进程释放正在使用的资源,可能导致孤儿进程。
26.24 向进程发送信号:kill
kill [ -signal ] pid… | jobid…
进程间通信
interprocesss communication
IPC
kill程序的目的就是支持一种不同类型的
IPC,具体而言,就是发送一个非常简单的消息,这种消息称为信号。信号不过是发送给进程的一个数字,从而让进程知道发送了哪些事情。进程会识别信号(称为捕获),从而决定执行什么动作。
编号 | 缩写 | 描述 |
---|---|---|
1 | HUP | 中止:注销或终端失去连接时发送给进程 |
2 | INT | 中断:当按下^C键时发送 |
9 | KILL | 杀死:立即终止,进程不能捕获 |
15 | TERM | 终止:请求终止,进程不能捕获 |
18 | CONT | 继续:恢复挂起的进程,由fg或 bg发送 |
19 | STOP | 停止(挂起):当按下^Z键时发送 |
26.25 设置进程的优先级:nice
调度器的任务就是在各个进程之间动态地分配资源。(优先级)nice [ -n adjustment ] command
优先级降低
-20—————————–> 19
例:
nice -n -20 specialprogram &
26.26 改变现有进程的优先级:renice
^Z(挂起)—>
bg—>
ps(查看进程ID)—>
renice niceness -p processed
26.27 守护进程
服务程序TTY列中的?字符表示该进程不受终端控制。守护进程很多以字母
d结尾。
查看守护进程:
ps -t - | less 或 ps -e | grep '?' | less
大多数守护进程在启动过程的最后一部分自动创建,(有些由
#1创建,另一些则不然),父进程死后都由
#1收养。
相关文章推荐
- Linux串口编程
- Linux C 指针数组 数组指针 函数指针 的使用实例
- 【转】 Linux内核spin_lock、spin_lock_irq 和 spin_lock_irqsave 分析
- Cmake 构建程序
- Linux的chattr与lsattr命令详解
- Linux crontab定时执行任务 命令格式与详细例子
- 几个linux操作命令
- linux 设备与驱动的绑定
- 如何在linux系统中设置静态ip地址
- linux总线对象bus_type
- Linux下查看文件和文件夹大小
- Linux中常用的查询指令(which、whereis、find、locatae)
- CentOs中mysql的安装与配置
- CentOS,Ubuntu,Gentoo,Freebsd,RedHat,Debian的区别及选择
- Linux 常用命令积累
- Unix & Linux笔记(16)
- [置顶] linux系统工程师修改打开文件数限制代码教程。服务器运维技术
- Centos sudo添加用户
- 安装虚拟机报错:Could not get vmci driver version: 参数错误. You have an incorrect version of driver "vmci.sys".
- [置顶] 修改linux操作系统的时间可以使用date指令 运维系统工程师必会技术