【hello Linux】进程概念(上)

目录

1.操作系统(OS)

2. 进程

2.1 基本概念

2.2 task_struct 内的属性字段

2.3 查看进程

2.4 查看进程的PID及PPID

2.5 杀死进程

2.6 以文件的方式查看进程

2.7 查看退出码

2.8 上下文数据

下面介绍两个较为方便的快捷键:



【hello Linux】进程概念(上)_第1张图片

 Linux

冯诺依曼体系结构大家可以看下:

 冯诺依曼体系结构

在学习进程之前,首先来简单了解下操作系统:

1.操作系统(OS)

操作系统是指控制和管理整个计算机系统的硬件和软件资源,并合理的组织调度计算机工作


和资源的分配,已提供给用户和其他软件方便的接口和环境,它是计算机系统最基本的系统


软件。

总的来说,可以概括为以下三点:

1. 负责管理和协调硬件、软件等计算机资源等工作;


2. 为上层用户、应该程序提供简单易用的服务;


3. 是一种系统软件。

 【hello Linux】进程概念(上)_第2张图片

那操作系统是如何为上层用户提供服务的呢?

操作系统会为用户提供一系列的系统调用接口,通过此接口用户可以与操作系统进行一定的

交互,但与操作系统直接交互,一是存在安全隐患,二是对接口的使用太过复杂。

在此接口之上,一些大佬们又对接口进行了软件封装,以第三方库的形式呈现,也就是形我

们现在使用的一些库函数,比如C/C++/JAVA/Python库函数:printf()

那操作系统是如何管理计算机软硬件资源的呢?

先拿生活中的一个例子来说吧!

在学校中,校长可以称得上是一位管理者,学生则是被管理者,除此之外,在管理者和被管

理者之间还有一位执行者,这个角色由辅导员来担任。

校长不直接对学生进行管理,而是发号施令由辅导员来执行,完成对学生的管理。

每一位学生是一个复杂的个体,我们得先用我们已知的数据结构将学生先进行描述,再进行

管理。

例如一个struct结构体来进行描述,单链表、顺序表等组织起来方便管理。

操作系统也一样,在操作系统内部,也是先描述,再组织;

将对目标的管理,转化成为对数据的管理。

先描述,再组织:这是放在整个操作系统都适用的准则。

2. 进程

2.1 基本概念

们平常都说加载在内存中的程序就叫做进程,但这个解释是不够全面的。 

仅仅是将磁盘中的程序加载到内存中就叫做进程了吗?

其实不是

操作系统遵循先描述再组织的原则,任何一个进程在形成之前,操作系统会自动为该进程创建PCB

(进程控制块)对它进行描述,这个PCB里面包含进程的所有属性信息。

因此一个进程 = 程序文件内容 + 与进程相关的数据结构(PCB)

在Linux系统中,PCB 通常用 task_struct 来描述,它是Linux内核的一种数据结构,所有运行在系

统里的进程都以 task_struct 链表的形式存在内核里,在程序运行时会被加载到内存中

有了 task_struct 之后,我们对进程的管理都是通过 task_struct 完成的。

2.2 task_struct 内的属性字段

  • 标示符: 描述本进程的唯一标示符,用来区别其他进程。
  • 状态: 任务状态,退出代码,退出信号等。
  • 优先级: 相对于其他进程的优先级。
  • 程序计数器: 程序中即将被执行的下一条指令的地址。
  • 内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
  • 上下文数据: 进程执行时处理器的寄存器中的数据
  • IO状态信息: 包括显示的I/O请求,分配给进程的IO设备和被进程使用的文件列表。
  • 记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
  • 其他信息

2.3 查看进程

ps axj | head -1 && ps axj | grep 进程名
//head -1 显示标题
//ps axj 显示正在运行的进程
//grep 对进程进行过滤

示例: 

编写了一个test.c程序:

【hello Linux】进程概念(上)_第3张图片

【hello Linux】进程概念(上)_第4张图片

 2.4 查看进程的PID及PPID

PID和PPID是进程的标识符

进程 id PID ):通过getpid()获得
父进程 id PPID):通过getppid()获得

上述例子已进行演示。

2.5 杀死进程

kill -9 PID

示例:

【hello Linux】进程概念(上)_第5张图片

原本左边运行的进程被杀死了。

如果不是强制要杀死的话,我们可以使用ctrl c:退出进程 

2.6 以文件的方式查看进程

1. 进程的信息可以通过 /proc 系统文件夹查看

【hello Linux】进程概念(上)_第6张图片

上面蓝色的文件对应的是一个进程的PID

进程创建时,蓝色文件(PID)自动创建,进程退出时自动消失

2. 查看具体进程属性

【hello Linux】进程概念(上)_第7张图片

 我们平常在一个目录touch创建目录,直接创在当前目录下,正是因为有上述记录信息:

【hello Linux】进程概念(上)_第8张图片

 2.7 查看退出码

【hello Linux】进程概念(上)_第9张图片

 我们平常写程序时总是 return 数字;其实 return 的这个数字称为退出码,程序正常运行完毕后会

被它的父进程拿到

我们可以使用如下命令输出最近执行命令的退出码:

echo $?

【hello Linux】进程概念(上)_第10张图片

 其实在此我们可以看到,不止运行的程序是一个进程,其实每一条命令的执行也是一个进程。

2.8 上下文数据

在CPU内部其实是存在一定的调度准则的,比如时间片轮转原则,一个进程上处理机运行几秒钟然

后下处理机换另一进程上处理机,那么便存在这一问题,如果进程还没运行完便被迫下处理机,等

下次上处理机的机会,那么它的上下文数据(运行到哪条指令了...临时数据)便要被保存起来,再此上处理

机时,便要将上下文进行恢复。

下面介绍两个较为方便的快捷键:

1. 批量化注释:

  • 在命令模式下,
  • ctrl v 
  • 选中要注释的内容(可以使用HJKL)
  • 大写I
  • 双斜杠(在此是看不到完全被注释的)
  • 按esc返回命令模式(所有选中的内容才被注释)

2. 批量化取消注释:

  • 在命令模式下,
  • ctrl v 
  • 选中要取消注释的内容(可以使用HJKL)(必须将//都选中)
  • 按d
  • 按esc返回命令模式

坚持打卡!

你可能感兴趣的:(Linux,linux)