Linux进程概念

来源:互联网 发布:linux数据库备份命令 编辑:程序博客网 时间:2024/05/15 03:50

九月开始了

程序:不太精确到说,程序就是执行一系列有逻辑有顺序结果的指令,帮我们达成某个结果

进程:进程就是程序在一个数据集合上的一次执行过程,简单的说就是运行中的程序

程序只是一系列执行的集合,是一个精致的实体,而进程不同,进程有以下的特性:

*动态性:进程的实质试一次程序执行的过程,有创见,撤销等状态的变化,而程序是一个静态的实体

*并发性:金城可以做到在一个时间段内有多个程序正在运行中,程序只是静态的实体所有不存在并发性

*独立性:进程可以独立分配资源,独立结束调度,独立的运行

*异步性:进程亦不可预知的速度向前推进

*结构性:进程拥有代码段数据段PCB也真是因为有结构性,进程才可以做到独立的运行

并发:在一个时间段内,宏观来看有多个程序都在活动,有条不许的执行

并行:在每一个瞬间,都有多个程序都在同时执行,这个必须有多个CPU才醒

线程:是操作系统能够运行运算调度的最小单位,他被包含在进程之中,是进程中的实际运作单位,一条线程指的是进程中一个但依顺序的控制流,一个进程中可以并发多个线程,每个线程并行执行不同的任务,因为线程中个几乎不包含资源,所有执行更快,更有效率

简而言之,一个程序至少有一个进程,一个进程至少有一个线程,线程的划分尺度小于进程,使得多线程程序的并发性高

进程的 分类

*以进程的功能与服务的对象来分,可以分为用户进程与系统进程:

用户进程:通过执行用户程序,应用程序或称之为内核之外的系统程序而产生的进程,此类进程可以在用户的控制下运行或关闭

系统进程:通过执行系统内核程序而产生的进程,比如可以执行内存资源分配和进程切换等相对底层的工作,而且该进程的运行不收用户的干预,即使是root用户也不能干预系统进程的运行

*以应用程序的服务类型来分,可以分成交互进程,批处理进程,守护进程

交互进程:有一个shell终端启动的进程,在执行过程中需要与用户进行交互操作,可以运行于前台,也可以运行在后台

批处理进程:该进程是一个进程集合,负责按顺序启动其他的进程

守护进程:守护进程是一直运行的一种进程,在linux系统启东时启动,在系统关闭时终止,他们是独立于控制终端并且周期性执行某种任务或等待处理某些发生的事件

进程的衍生

就比如我们启动了终端,就是启动了一个 bash 进程,我们可以在 bash 中再输入 bash 则会再启动一个 bash 的进程,此时第二个 bash 进程就是由第一个 bash 进程创建出来的,他们直接又是个什么关系?

我们一般称呼第一个 bash 进程是第二 bash 进程的父进程,第二 bash 进程是第一个 bash 进程的子进程

关于父进程与子进程便会提及这两个系统调用fork()  exec()

fork() 是一个系统调用(system call),它的主要作用就是为当前的进程创建一个新的进程,这个新的进程就是它的子进程,这个子进程除了父进程的返回值和 PID 以外其他的都一模一样,如进程的执行代码段,内存信息,文件描述,寄存器状态等等

exec() 也是系统调用,作用是切换子进程中的执行程序也就是替换其从父进程复制过来的代码段与数据段

在将要结束时的子进程代码执行部分已经结束执行了,系统的资源也基本归还给系统了,但若是其进程的进程控制块(PCB)仍驻留在内存中,而它的 PCB 还在,代表这个进程还存在(因为 PCB 就是进程存在的唯一标志,里面有 PID 等消息),并没有消亡,这样的进程称之为僵尸进程(Zombie)

虽然僵尸进程试衣镜放弃了几乎所有内存空间,没有任何可执行代码,也不能被调度,在进程列表中保留一个位置记载该进程的推出状态等信息供其父进程收集,从而释放他,但Linux系统中能用户的PID是有限的,如果系统中 存在大量僵尸进程,将会因为没有可用PID从而导致不能产生新的进程

另外如果父进程结束(非正常的结束),未能及时收回子进程,子进程仍在运行,这样的子进程称之为孤儿进程。在 Linux 系统中,孤儿进程一般会被 init 进程所“收养”,成为 init 的子进程。由 init 来做善后处理,所以它并不至于像僵尸进程那样无人问津,不管不顾,大量存在会有危害

init是用户进程的第一个进程也是所有用户进程的父进程或者祖先进程

每一个进程都会是一个进程组的成员,而且这个进程组是唯一存在的,他们是依靠 PGID(process group ID)来区别的,而每当一个进程被创建的时候,它便会成为其父进程所在组中的一员

一般情况,进程组的 PGID 等同于进程组的第一个成员的 PID,并且这样的进程称为该进程组的领导者,也就是领导进程,进程一般通过使用 getpgrp() 系统调用来寻找其所在组的 PGID,领导进程可以先终结,此时进程组依然存在,并持有相同的PGID,直到进程组中最后一个进程终结

每当一个进程被创建的时候,他便会称为其父进程所在session中的一员,每一个进程都会在一个session,并且这个session是唯一存在的

session主要是针对一个TTY建立,session中的每个进程都成为一个job每个会话可用链接一个终端,控制终端有输入输出,都传递该会话的前台进程组,session意义在于将多个Job包括在一个终,并取其中一个Job作为前台,来直接接收该终端的输入输出以及终端信号,其他在后台运行

-1 重新读取参数运行,类似与restart
-2 如同 ctrl+c 的操作退出 
-9 强制终止该任务   
-15 正常的方式终止该任务

注意

若是在使用kill+信号值然后直接加 pid,你将会对 pid 对应的进程进行操作

若是在使用kill+信号值然后 %jobnumber,这时所操作的对象是 job,这个数字就是就当前 bash 中后台的运行的 job 的 ID


原创粉丝点击