Linux个人学习笔记——进程(2)

一、进程

1.1概念

一个已经加载到内存中的系统,叫做进程(任务)/正在运行的程序。

1.2、理解

一个操作系统,不仅仅只能运行一个进程,可以同时运行多个进程。
——>因此,操作系统必须把进程管理起来,那么如何管理?先描述,再组织(增删查改)
——>任何一个进程,在加载到内存时,形成真正的进程时,操作系统要先创建描述进程的结构体对象——PCB(Process control block)(进程控制块)
PCB本质上就是struct结构体

  1. 进程编号
  2. 进程状态
  3. 优先级
  4. 相关的指针信息(找到代码和数据)
  5. struct PCB* next(再组织管理所有进程的PCB,所有PCB就成为了一个单链表)

根据进程的PCB类型,为该进程创建对应的PCB对象。
那么进程是什么?
想象一下你高考完大学把你录取了,首先把你的档案从高中调过去,这是你的个人信息,再等你暑假结束,你到了学校。学校里的保安室这个学校里的学生吗?显然不是,虽然保安是在学校里,但其并没有在教务在线中存有相应的数据。

由此可见:存在内存里的代码和数据管理内存和代码的PCB内核数据结构才叫做一个进程。而操作系统直接对PCB进行管理。

在操作系统中,对进程进行管理,就是对单链表进行增删查改。

描述进程-PCB

  • 进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。
  • 课本上称之为PCB,Linux操作系统下的PCB是:task_struct。

task_struct:PCB的一种

  • 在Linux中描述进程的结构体叫做task_struct。
  • task_struct是Linux内核的一种数据结构(聚合类型),它会被装载到RAM内存里并且包含着进程的信号。

task_struct内部分类

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

查看进程的相关指令

ps ajx | head -1 &&ps ajx | grep file_name

先创建一个myprocess.c文件

touch myprocess.c
touch Makefile
vim process.c

myprocess.c文件

  1 #include<stdio.h>                                                             
  2 #include<unistd.h>
  3 
  4 int main()
  5 {
  6   while(1)
  7   {
  8     printf("我是一个进程啦...\n");
  9     sleep(1);
 10   }
 11   return 0;
 12 }

Makefile文件

  1 myprocess:myprocess.c
  2     gcc -o $@ $^
  3 .PHONY:clean
  4 clean:
  5   rm -f myprocess.                                                            

执行myprocess后
运行情况
查看进程

 ps ajx | head -1 &&ps ajx | grep myprocess

输出结果
PID:显示的是进程中唯一的ID值。
**注意:**这里的grep --color=auto myprocess为grep启动的进程。此时的PID为1618

ls ./proc

proc目录当中,它包含是系统当中动态运行的所有进程的相关信息。
输出结果

ls /proc -l

输出结果
这里的黑色字体是普通文件,这些蓝色字体是目录。而图二的数字都是PID。
输出结果
如果我们此时干掉myprocess这个进程。此时再进去就会发现没有响应的文件。
输出结果
我们再启动该进程,查看该进程的PID,再查看该进程在./proc目录下的相关属性。
输出结果
这里着重查看两个属性:execwd

exe——链接文件

这里指向的是/home/user1/Test-lesson1/myprocess,也即自己当前正在运行的myprocess进程。

cwd——current wrok dir(当前进程的工作目录)

顾名思义,存储的是自己当前的文件目录,也是因此,touch命令创建文件时产生进程,而进程是依靠cwd去找到相应的文件路径。就比如说调用fopen()时,是自动把cwd拼接到创建的文件名前。
例:fopen(“log.txt”,“w”); 即创造的文件路径为cwd/log.txt,也即/home/user1/Test-lesson1/log.txt。

  • 25
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值