首页 > 系统相关 >Linux 进程

Linux 进程

时间:2024-06-02 18:58:11浏览次数:22  
标签:fork struct 创建 代码 PCB Linux 进程

1.什么叫进程

答:一个已经加载到内存的程序,叫进程(任务);

1.1 一个操作系统可以运行多个进程,可以跑多个任务;

1.2任何一个进程,在加载到内存的时候,形成真正的进程,操作系统要先创建描述进程的结构体对象——PCB,process ctrl block——进程控制块(进程属性的集合)——struct 结构体

1.3 进程:1.存在进程控制块(即操作系统里有进程控制块);2.存在该进程的代码和数据;两者合起来才叫进程; 

所谓的进程:内核pcb数据结构对象(描述这个进程的所有属性值) + 自己的代码和数据;所谓的管理,其实就是对PCB数据结构对象做管理;

操作系统中,对进程进行管理,变成了对单链表的增删查改(比如进行了一个进程,又添加一个进程)

1.4描述进程 -PCB 进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。 课本上称之为 PCB ( process control block ), Linux 操作系统下的 PCB 是 : task_struct 1.5task_struct-PCB 的一种 在 Linux 中描述进程的结构体叫做 task_struct 。 task_struct 是 Linux 内核的一种数据结构,它会被装载到 RAM( 内存 ) 里并且包含着进程的信息 1.6 task_ struct 内容分类 标示符 : 描述本进程的唯一标示符,用来区别其他进程。 状态 : 任务状态,退出代码,退出信号等。 优先级 : 相对于其他进程的优先级。 程序计数器 : 程序中即将被执行的下一条指令的地址。 内存指针 : 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针 上下文数据 : 进程执行时处理器的寄存器中的数据 [ 休学例子,要加图 CPU ,寄存器 ] 。 I / O 状态信息 : 包括显示的 I/O 请求 , 分配给进程的 I / O 设备和被进程使用的文件列表。 记账信息 : 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。 其他信息 2.Linux中是如何组织进程 Linux内核中,最基本的组织进程task_struct的方式,采用双向链表组织的; 3.查看属性
ls /proc    //查看内存中的所有跑着的进程
            //如:要获取PID为1的进程信息,你需要查看 /proc/1 这个文件夹。
cwd  (current work dir) //当前进程的工作目录(当前路径),进程在启动时有自己的工作目录;
                        //为PCB创建时,展现的工作目录;
exe   //

4.

ps ajx     //查看所有进程

ps ajx | grep test   //查看所有关于test的进程

kill -9 PID序号(进程ID)   //关闭PID序号的程序

5.查看pid的函数

yum -y install man-pages  //想要查看getpid这个函数必须要安装这个包;否则查不到


#include <sys/types.h>        //头文件:                         
#include <unistd.h> 
          
pid_t getpid(void);           //函数原型                  
pid_t getppid(void);          // 获取父进程pid

6.通过系统调用来创建进程—fork初识

#include <unistd.h>   //头文件

pid_t fork(void);     //函数类型
#include <stdio.h>
#include<unistd.h>

int main()
{
    printf("before:only one line\n");
    fork();
    printf("after:only one line\n");    //fork之后的命令会被执行2次
}
./运行我们的程序   ——指令级别
fork()——————代码层面创建子进程;

7.为什么fork要给子进程返回0,给父进程返回子进程pid?

答:返回不同的返回值,是为了区分让不同的执行流,执行不同的代码块!

一般而言fork之后的代码父子共享,通过不同的返回值区分父子进程;

通俗来讲1个父亲可以有多个儿子,但是1个儿子只能有1个父亲,必须通过准确的pid来区分每个儿子;子进程可以直接调用getpid和getppid就直接可以获得相关的数据;不需要太高的成本;

7.1创建子进程:意味着系统中多了一个进程,进程=内核数据结构+对应的代码和数据,可是子进程应该执行什么样子的代码呢?刚开始创建子进程,子进程没有对应自己的代码,所以他只能执行父进程的代码,这就解释了上图fork命令之后为什么会被执行两次;fork之后父子进程代码是共享的;

7.2一般把c/c++加载到内存之后,代码是不可能被修改的

7.3我们为什么要创建子进程呢?答:为了让父和子执行不同的事情,需要想办法让父和子执行不同的代码块;rangfork具有了不同的返回值 

8.一个变量怎样能够返回两次

答:fork是一个函数,在fork里创建了子进程,,填充了PCB,以及让子进程和父进程有了形同的代码,两者都有独立的task_struck,相同的代码;可以被cpu调度运行,return处于创建子进程之后,也是代码,自然是父子共享的,父进程调用返回了一份,子进程也调用也返回了一份,所以返回了两次;

9.一个变量怎样存在不同的值?

因为数据可能被修改,所以不能让父进程和子进程共享一份数据;(代码可以共享,数据不能共享)所以父进程被操作系统单独拷贝了一份数据,用来支持子进程的单独运行;但是这样会出现一个问题,无法判断父进程中的数据是否是子进程中需要的,会造成资源的浪费;这样就变成了,创建子进程时和父进程公用一块代码和数据,当子进程想要修改数据时,操作系统就重新创建一块空间来修改数据,想修改多少,就创建多少空间;——这种技术叫数据层面的写时拷贝;

9.如果父进程创建了子进程,那么他们谁先运行呢?答:谁先运行,由调度器决定,所以谁先运行是不确定的;

标签:fork,struct,创建,代码,PCB,Linux,进程
From: https://blog.csdn.net/qincjun/article/details/139262420

相关文章

  • ProcDump工具的基本用法和功能,并掌握如何利用它进行进程监视、性能分析和故障排查,从而
    ProcDump初级应用的大纲:1.ProcDump简介与基本用法介绍ProcDump工具的基本作用和功能。演示如何使用ProcDump来监视进程并在满足指定条件时生成转储文件。2.进程监视与性能分析探讨如何使用ProcDump监视进程的CPU利用率、内存占用等性能指标。演示如何利用ProcDump生成......
  • Process Explorer工具,帮助他们更好地管理和监控Windows系统中的进程和系统资源;掌握更
    初级应用ProcessExplorer的大纲:1.ProcessExplorer简介简要介绍ProcessExplorer工具的作用和用途。解释为什么ProcessExplorer是管理Windows系统进程的有用工具。2.工具界面导览展示ProcessExplorer的主要界面和功能区域。解释各个部分的作用和功能。3.进程查看......
  • 使用 Kali Linux 实现 Smurf 攻击
    一、介绍Smurf攻击是一种分布式拒绝服务(DDoS)攻击,利用IP协议中的ICMP(InternetControlMessageProtocol)请求和网络的广播特性,使目标系统被大量ICMP回复包淹没,从而导致系统无法正常提供服务。以下是对Smurf攻击的详细介绍:1.1攻击原理ICMPEcho请求:正常情况下,ICMPEcho请求......
  • Linux系统上配置redis开机自启
    Redis开机自启:第一步添加环境变量:命令:vim/etc/profile在结尾添加:exportPATH=$PATH:/usr/local/redis/bin作用是为了后续脚本的启动命令不需写的过长重载环境变量文件:source/etc/profile第二步:编写redis.service节点1:152服务器vim/etc/systemd/system/redis.service添......
  • 信号量(Semaphore),事件Event(了解),队列补充,进程池和线程池(重点),协程理论,Greenlet,Gevent模
    Ⅰ信号量(Semaphore)【一】什么是信号量信号量Semahpore(同线程一样)互斥锁:允许在同一时刻只能有一个线程或进程同资源进行修改信号量:允许指定数量的进程或线程对资源进行修改【二】例子比如厕所有3个坑,那最多只允许3个人上厕所,后面的人只能等里面有人出来了才能再进去......
  • linux: 基础io
     在C语言中,我们也学习过对文件进行操作,使用C语言对文件进行读写操作是一个正在运行的进程去访问一个二进制文件,想要访问一个文件,首先需要打开这个文件,不同语言都有对文件操作的接口,但是文件本身是存在于磁盘外设中的,想要从磁盘外设中拿到数据,这是要通过操作系统接手的,因为操......
  • linux:进程控制
    之前在晋城地址空间中有提到fork函数,可以创建一个子进程,但是它却有两个返回值附进程,返回子进程的进程号,PID子进程则返回零,那如何理解这一过程?一个函数返回两个返回值呢? 可以看到帮助文档中显示有两个返回值. Fork函数是一个系统调用,其中包括如下几个步骤,有创建子进......
  • linux:进程地址空间
    在之前使用C语言中,我们知道使用malloc函数可以开辟一块堆空间,然后这块堆空间如果不用的话是需要释放的,然后一般的变量是放在栈区上面的,还有一些静态区,代码段是存放静态变量和代码的,这些空间可以说是内存,但他又不是真正意义上的物理内存,我们可以做一个实验,我们可以使用fork......
  • linux:环境变量
    说到环境变量,相信这个词不是第一次听到了,在WINDOWS中可能在安装JAVA的过程中也会遇到有配置系统环境变量的相关操作我们知道在一个操作系统中存在着大量的数据信息,但是我们可以在命令行中输入一条命令,能准确的从计算机中的某个位置找到,并且执行对应命令的进程,计算机的命令行为什么......
  • 【Linux】System V 共享内存
    一、共享内存1.1共享内存的原理:       两个进程,操作系统在内存空间中创建一个共享内存。在之前学习库的时候,有一个共享库的概念。我们可以按照其概念来了解共享内存的概念:将共享内存映射到页表中,和进程的地址空间建立联系。我们可以将共享内存的虚拟地址交给用户。两......