1.进程和程序(process and program)
首先我们对进程作一明确定义:所谓进程是由正文段(text)、用户数据段(user segment)以及系统数据段(system segment)共同组成的一个执行环境。
程序只是一个普通文件,是一个机器代码指令和数据的集合,这些指令和数据存储在磁盘上的一个可执行映象(executable image)中,所以,程序是一个静态的实体。linux是一个多任务操作系统,也就是说,可以有多个程序同时装入内存并运行,操作系统为每个程序建立一个运行环境即创建进程,每个进程拥有自己的虚拟地址空间,它们之间互不干扰,即使要相互作用(例如多个进程合作完成某个工作),也要通过内核提供的进程间通信机制(ipc)。linux内核支持多个进程虚拟地并发执行,这是通过不断地保存和切换程序的运行环境而实现的,选择哪个进程运行是由调度程序决定的。
进程是一个动态实体,进程实体由三个独立的部分组成:
(1)正文段(text):存放被执行的机器指令。这个段是只读的(所以,在这里不能写自己能修改的代码),它允许系统中正在运行的两个或多个进程之间能够共享这一代码。例如,有几个用户都在使用文本编辑器,在内存中仅需要该程序指令的一个副本,他们全都共享这一副本。
(2)用户数据段(user segment):存放进程在执行时直接进行操作的所有数据,包括进程使用的全部变量在内。显然,这里包含的信息可以被改变。虽然进程之间可以共享正文段,但是每个进程需要有它自己的专用用户数据段。例如同时编辑文本的用户,虽然运行着同样的程序__编辑器,但是每个用户都有不同的数据:正在编辑的文本。
(3)系统数据段(system segment):该段有效地存放程序运行的环境。事实上,这正是程序和进程的区别所在。如前所述,程序是由一组指令和数据组成的静态事物,它们是进程最初使用的正文段和用户数据段。作为动态事物,进程是正文段、用户数据段和系统数据段的信息的交叉综合体,其中系统数据段是进程实体最重要的一部分,之所以说它有效地存放程序运行的环境,是因为这一部分存放有进程的控制信息。系统中有许多进程,操作系统要管理它们、调度它们运行,就是通过这些控制信息。linux为每个进程建立了task_struct数据结构来容纳这些控制信息。
进程和程序(process and program)
如图所示,程序与进程的关系
2.工作管理(job control)
工作管理就是当我们登录系统取得bash shell 之后,在单一终端机下同时进行多个工作的行为管理。bash只能管理自己的工作,不能管理其他bash的工作,此外,工作又分为前台和后天,在后天的工作状态分为“暂停”与“运行”。
2.1&:可以直接将命令丢到后台执行
例如我们将/etc目录进行备份成为/tmp/etc.tar.gz,并丢到后台。
2.2"&"代表丢到后台,[1]代表工作号码,“2448”代表PID
ctrl+z:可以将目前的工作丢到后台暂停,如我编辑/etc/fstab后按ctrl+z,如下所示
[2]代表第二个工作,Done表示完成,Stopped表示停止
2.3查看目前后台的状态:
[[email protected] ~]# jobs
- -l 列出job number和命令,pid
- -r 仅列出正在运行的job
- -s 仅列出停止状态的job
2.4将后台工作拿到前台处理:fg
%2就是取出2号工作,其中“+”代表默认的取用工作,“-”次取用工作。如果fg后不带参数,就默认取用“+”工作。
2.5让工作在后天的状态变成运行态:bg
可以看到通过bg命令可以使工作由STOPPED变成RUNNING。
2.6管理后台的工作:kill
[[email protected] ~]# kill
- -l 列出目前kill能够使用的信号
- -1 重新读取一次参数的配置文件
- -9 立刻强制删除一个工作
- -15 以正常的流程结束一个工作
kill -l 命令可以查看所有single
3.进程管理