最近看书的时候,发觉看的比较糊涂了,这些概念被抹的特别乱。先整理下,希望对我们以后的理解有所帮助。
进程:是一个程序在其自身的虚拟地址空间的一次执行活动。
程序只是静态的数据和指令的集合,进程是一个程序的动态执行过程,具有生命周期,是动态产生和消亡的。
------------------
系统启动后的第一个进程是init,pid是1,是内核唯一直接运行的进程,
系统启动后,init进程会创建login进程等待用户登录,当用户登录系统后,login进程就会为用户启动shell进程,此后用户运行的进程都是由shell衍生出来的。
------------
进程分类:
交互进程:有一个Shell启动的进程,可在前台运行,也可在后台运行。
批处理进程:不与特定的终端相关联,提交到等待队列中顺序执行的进程。
守护进程:在Linux启动时初始化,需要时运行于后台的进程。
-------------
进程启动方式:
1.手工启动:由用户输入命令直接启动一个进程,分为:
前台启动--直接输入命令
后台启动--在命令行后使用&命令
2.调度启动:事先设置,根据用户要求让系统自动启动
--------------
作业控制
作业控制,指控制当前正在运行的进程的行为,也称为进程控制。是Shell的一个特性,使用户能在多个独立进程间进行切换。
常用命令
命令或快捷键 功能说明
cmd& 该命令在后台运行
Ctrl+d 终止一个正在前台运行的进程(含有正常含义)
Ctrl+c 终止一个正在前台运行的进程(含有强行含义)
Ctrl+z 挂起一个正在前台运行的进程
jobs 显示后台作业和被挂起的进程
bg 重新启动一个挂起的作业,并在后台运行
fg 把一个在后台运行的作业放到前台运行
常用的作业标识符
标识符 说明
%N 第N号作业
%S 以字符串S开头的被命令行调用的作业
%?S 包含字符串S的被命令行调用的作业
%+ 默认作业(前台最后结束的作业,或后台最后启动的作业),等同于%%
%- 第二默认作业
-------------------
对话期
一个对话期是一个或多个进程组的集合。
一个进程可以调用setsid()建立一个新的对话期。
建立与控制终端连接的对话期首进程称为控制进程。
-------------------
控制终端,会话期,前台进程,后台进程之间的关系
新建终端 看成是建立了 一个session
shell就是session里的控制首进程 也就是建立与控制终端连接的对话期首进程
然后我可以在shell提示符下通过管道建立一组命令,并把它放到后台运行 cmd1 | cmd2 | cmd3 &
这样cmd1 cmd2 cmd3 属于后台进程组 它们是无法接受控制台输入的,包括中断退出这些信号都不会对它们产生作用
这时我还可以在shell命令提示符下运行另外一组命令 cmd4 | cmd5 | cmd6
这个就是前台进程组 你键入中断或者退出信号 都只会对它们起作用
而shell进程即控制进程是不会退出或者被中断的