Linux 进程概念

目标

对于linux进程有初步的概念(进程与程序,进程的衍生,工作管理)


学习目录

1.进程概念理解
2.进程的属性
2.1进程的分类
2.2进程的衍生
2.3进程组与sessions
2.4工作管理


1.进程概念理解

什么是程序,什么是进程?什么是线程?

程序:

程序是一个静态的概念,一般对应一个操作系统中的一个可执行文件(待执行),由一系列有逻辑,有顺序结构的指令组成

进程:

1.执行中的程序叫做进程,是一个动态的概念

2.进程是包含上下文切换的程序执行时间总和,是对应的CPU时间段的描述,是描述这一CPU时间段的名词。参考网址

3.进程,是计算机中的程序关于某数据集合上的一次运动活动,是系统进行资源分配和调度的基本单位。操作系统结构的基础。它的执行需要系统分配资源创建实体后才能进行。

4.在Linux2.6更新后,进程本身不是基本运行单位,而是线程的容器(只在Linux中)。

5 进程是程序的一次动态执行过程,占用特定的地址空间

6.每个进程由三部分组成:代码段,数据段,进程控制块每个进程都是独立的,拥有自己的cpu时间,代码和数据,即使一个程序产生了好几份进程,他们之间还是独立拥有自己的这三件东西,这样的缺点是:浪费内存,cpu负担较重参考网址

线程:

1.随着技术的发展,在执行一些细小任务时,本身无需分配单独资源,进程依然会繁琐的将资源分割,即浪费时间还浪费资源,然后专门运用于这个场景的多任务技术被创造——线程。进程可以产生多个线程,而这些线程可以共享进程的某些资源,所以进程不需要独立的资源就可以运行,可以节省资源与时间。

2.进程是操作系统能够进行运算调度的最小单位。它被包含在进程内,是进程中实际运作单位

3.线程是一个进程内部的一个执行单元,它是程序中的单一的顺序控制进程

4.一个进程拥有多个并行线程(需多个cpu)。

5.一个进程内的多个线程共享相同的内存地址空间,可以访问相同的变量和对象,它们从同一堆中分配对象并进行通信,数据交换和同步操作

6.它是比进程更为细小cpu时间段
进程与线程区别参考网址


2.进程的属性

进程的属性分为(进程的分类)(进程的衍生)(进程组与sessions)(工作管理)。


2.1进程的分类

两个角度:
一(进程的功能与服务的对象来分)
二(应用程序的服务类型)

进程的功能与服务对象

  • 用户进程:通过执行用户程序,应用程序或称之为内核之外的系统程序而产生的进程,此类进程可以在用户的控制下运行或关闭。
  • 系统进程:通过执行系统内核程序而产生的进程,而且该进程的运行不受用户干预。即使root用户也不能干预系统进程的运行。

应用程序的服务类型

  • 交互进程:由shell终端启动的进程,在执行过程中,需要与用户进行交互操作。可以运行前台,也可以运行于后台。
  • 守护进程:一种一直运行的进程。例如httpd进程。

2.2进程的衍生

  1. 父进程与子进程:我们启动终端就是启动了一个bash进程,当我们在bash中再输入bash则会再启动一个bash进程。我们叫第一个bash进程为父进程第二个bash进程为其子进程

  2. fork()exec()
    fork():是一个system call,主要作用是为当前进程创建一个新的进程,这个新进程就是它的子进程,这个子进程除了父进程的返回值和PID以外其他的信息都一模一样。
    exec():也是系统调用,作用是切换子进程中的执行程序,替换其从父进程复制过来的代码段和数据段。

  3. 子进程退出与资源回收:当一个子进程要正常的终止运行时或该进程结束时它的主函数main()会执行exit(n);return n,这里的n是一个信号,系统会将这个SIGCHLD信号返回给父进程。

4.僵尸进程:当子进程代码执行部分已经结束执行,系统资源也基本归还给系统了,但若是其进程的进程控制块仍驻留在内存中,而它的PCB还在,代表这个进程还存在,并没有消亡Z(Zombie)表示僵尸进程。 缺点:子进程会占用PID,而系统会因为没有可用的PID从而导致不能产生新的进程。

5.孤儿进程:当父进程非正常结束,未能及时回收子进程,子进程仍在运行,这样的进程被称为孤儿进程。这样的进程会被init进程收养。

6.进程结构

进程0:是系统引导时创建的一个特殊进程,称为内核初始化,其最后一个动作就是调用fork()创建出一个子进程运行/sbin/init可执行文件,该进程的PID=1,进程0转化为空闲进程。
init进程:第一个用户态的进程,由它不断调用fork()来创建系统里的其他进程,是所有程序的父进程,同时它也是一个守护进程。
在这里插入图片描述
通过ps -fxo user,ppid,pid,pgid,command可以看到在这里插入图片描述
(pid是该进程的唯一编号)(ppid是该进程的父进程的pid)(command表示该进程通过执行什么样的命令或脚本产生的)参考网址


2.3进程组与sessions

  1. 进程组:每一个进程都是一个进程组的成员,每一个进程组都是唯一存在的,它们依靠PGID来区别,每当一个进程被创建的时候,它便会成为其父进程所在组的一员。
    一般来说,该进程组的PGID等同于进程组的第一个成员的PID,该进程是这个进程组的主进程。主进程可以先终结,此时进程组仍然存在,并持有相同的PID,知道进程组中的最后一个进程结束。
    每一个进程组sessions中,并且这个sessions是唯一存在的。

2.sessions:sessions是针对一个tty建立。sessions中的每一个进程都称为job,每一个会话可以连接一个终端。
sessions 的主要作用是:将多个jobs囊括在一个终端,并取其中一个job作为前台,直接接收该终端的输入输出以及终端信号,其他job在后台运行。


2.4工作管理

每个bash(终端)只能管理当前终端的job。

[job] &    #&让命令在后台运行

ctrl+z    #当前工作停止并转到后台

jobs     #查看停止并被放置在后台的工作

fg [%jobnumber]    #将在后台的工作拿到前台来 
#例:fg %1    #将后台job编号为1的job拿到前台来 

bg [%jobnumber]    #将job在后台运作
#例: bg %1    #将后台job编号为1的job在后台运行

kill [-信号值] [%jobnumber]     #删除或重启job
kill信号值补充:
-1: 重新读取参数运行
-2:如同ctrl+c的操作退出
-9:强制终止该任务
-15:正常的方式终止该任务
发布了32 篇原创文章 · 获赞 0 · 访问量 888
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章