Linux进程概念(一)

这篇具有很好参考价值的文章主要介绍了Linux进程概念(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


Linux进程概念

前文我们了解了,进程的基本概念,在课本上被描述为,正在执行的程序,在linux内核上,认为进程是担当分配系统资源(CPU时间,内存)的实体。

进程=内核描述数据结构(PCB)+代码和数据

在Linux中,PCB为task_struct,它会被装载到RAM(内存)里并且包含着进程的信息。

本文我们主要是了解进程的部分概念。

查看进程

查看进程的方式有很多种,前文我们介绍了在/proc 系统文件中查看,在该文件目录下,进程就是一个又有一个数字目录。

Linux进程概念(一),Linux,linux,进程状态,fork创建子进程,进程

ps的使用

语法:ps ajx 可以查看当前所有进程

ps ajx | grep 程序/文件名 来查看程序/文件的进程信息

Linux进程概念(一),Linux,linux,进程状态,fork创建子进程,进程

解释:

ps ajx | grep proc 可以在所有进程信息中,查找到proc的进程信息

ps ajx | head -1 表示将进程的属性的描述信息显示

ps ajx | head -1 && ps ajx | grep proc 显示进程proc的相关信息,并带上进程属性的描述

ps ajx | head -1 && ps ajx | grep proc | grep -v grep 不显示grep的进程信息

&&可以用分号代替,使得两条指令能一起执行,将执行的结果一并展示出来。

杀死进程

语法:kill -9 PID

向执行的PID进程发送9号信号,正在运行的PID进程显示killed,被杀死
Linux进程概念(一),Linux,linux,进程状态,fork创建子进程,进程

进程标识符

PID:进程ID

PPID:父进程ID

获取标识符的方式:getpid()、getppid()

Linux进程概念(一),Linux,linux,进程状态,fork创建子进程,进程

注意:getpid()和getppid()都是系统调用函数,来通过该函数来访问操作系统,得到自己的进程信息,重新运行程序子进程的PID会发生变化,但是父进程ID不会发生变化。

bash是所有程序的父进程,将其他程序作为其的子进程,子只有一个父,但是父可有多个子

手动创建进程的方式

我们知道两种创建进程的方式,第一种就是./proc执行程序,以此来创建进程,第二种,使用fork函数来创建进程。

创建进程的方式,有以下两种

  • ./运行程序 指令级别
  • fork函数 代码级别

fork函数创建进程

fork函数用来创建子进程。

两种结果

  • 成功创建子进程,子进程返回0,父进程返回的是子进程的PID
  • 创建失败,父进程返回-1

Linux进程概念(一),Linux,linux,进程状态,fork创建子进程,进程
Linux进程概念(一),Linux,linux,进程状态,fork创建子进程,进程

#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
int main()
{
    
    printf("这是一个进程,PID为:%d,PPID为:%d\n",getpid(),getppid());
    sleep(1);
    //fork()创建子进程
    pid_t id =fork();
    
    if(id == 0)
    {
        //表示子进程
        while(1)
        {
            printf("子进程,PID为:%d,PPID为:%d\n",getpid(),getppid());
            sleep(1);
        }
    }
    else if(id > 0)
    {
        //父进程,PID是一个非负数
        while(1)
        {
            printf("父进程, PID为:%d,PPId为:%d\n",getpid(),getppid());
            sleep(1);
        }
    }
    else{
        //创建子进程失败
        printf("创建子进程失败\n");
    }
    return 0;
}

问题:

  1. 为什么fork要给子进程返回0,给父进程返回子进程的PID?
  2. 一个函数是如何做到返回两次的?如何理解?
  3. 一个变量怎么会有不同的内容?如何理解?
  4. fork函数到底在干什么?干了什么?
  5. 进程调用的顺序
  6. bash是如何创建的,以及与fork的关系

为什么fork要给子进程返回0,给父进程返回子进程的PID?

Linux进程概念(一),Linux,linux,进程状态,fork创建子进程,进程

总结:返回不同的返回值,是为了区分父子进程,使得执行不同的代码块

一个函数是如何做到返回两次的?如何理解?
Linux进程概念(一),Linux,linux,进程状态,fork创建子进程,进程

两个返回值的实现依赖于,在创建子进程之后,父子进程共享代码

一个变量怎么会有不同的内容?如何理解?

Linux进程概念(一),Linux,linux,进程状态,fork创建子进程,进程

在任何平台,进程在运行的时候,都是具有独立性的,子进程是和父进程开始指向同一数据的,但是如果子进程修改某一数据,就会发生写时拷贝,指向开辟的空间。

fork函数到底在干什么?干了什么?
Linux进程概念(一),Linux,linux,进程状态,fork创建子进程,进程

fork函数就是创建子进程,然后根据进程的不同返回不同的数据。

进程调用的顺序

调度器:是一种执行选取进程的算法,决定选取哪一个进程放在CPU上执行。

父子进程创建完毕之后,谁先运行是由调度器来决定的,所以不知道谁先被执行

bash是如何创建的,以及与fork的关系

Linux进程概念(一),Linux,linux,进程状态,fork创建子进程,进程

进程状态

Linux进程概念(一),Linux,linux,进程状态,fork创建子进程,进程

运行态

运行态,顾名思义,该进程现在是可以被执行的,已经准备好被调用了。
Linux进程概念(一),Linux,linux,进程状态,fork创建子进程,进程

注意:一个进程是否是运行态,看这个进程是否被放在运行队列(runqueue中),一个CPU只有一个运行队列(runqueue)

阻塞态和挂起

Linux进程概念(一),Linux,linux,进程状态,fork创建子进程,进程

阻塞态,就是等待I/O完成的进程,需要I/O的进程去找对应的外设,连接外设的struct task_struct* head,形成链表,然后在等待输入数据的过程,这就是阻塞

挂起,就是由于操作系统空间不足时,我们将阻塞态的进程的空闲的代码和数据,换出(从内存放在硬盘中),这就叫做挂起。一般的挂起指的是阻塞挂起,运行挂起一般不出现。

换出是暂时调离内存,放在硬盘中,换入是被操作系统调入内存中,重新等待被执行。文章来源地址https://www.toymoban.com/news/detail-621325.html

到了这里,关于Linux进程概念(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux】进程概念与fork初识——if与else竟然能够同时执行?!

    🌸作者简介: 花想云 ,在读本科生一枚,C/C++领域新星创作者,新星计划导师,阿里云专家博主,CSDN内容合伙人…致力于 C/C++、Linux 学习。 🌸 专栏简介:本文收录于 Linux从入门到精通 ,本专栏主要内容为本专栏主要内容为Linux的系统性学习,专为小白打造的文章专栏。

    2024年02月01日
    浏览(28)
  • [入门篇]Linux操作系统fork子进程的创建以及进程的状态 超超超详解!!!我不允许有人错过!!!

    目录 0.前言 1.fork()创建子进程讲解 1.1fork()的简单介绍 1.2 创建子进程详解 1.2.1 如何理解fork创建子进程 1.2.2 子进程的PCB以及子进程的代码和数据 1.2.3为什么要共享写时拷贝 1.2.4 什么时候发生写时拷贝 1.3 fork函数返回值详解 1.3.1引入fork返回值的作用 1.3.2 fork返回执行逻辑剖析

    2024年03月21日
    浏览(45)
  • 2.【Linux】(进程的状态||深入理解fork||底层剖析||task_struct||进程优先级||并行和并发||详解环境变量)

    Linux把所有进程通过双向链表的方式连接起来组成任务队列,操作系统和cpu通过选择一个task_struct执行其代码来调度进程。 1.运行态:pcb结构体在运行或在运行队列中排队。 2.阻塞态:等待非cpu资源就绪(硬盘,网卡等资源) 3.挂起态:一个进程对应的代码和数据被操作系统因

    2024年01月22日
    浏览(37)
  • 【Linux笔记】Linux进程概念与进程状态

    进程的概念: 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序

    2024年02月06日
    浏览(32)
  • 【Linux】进程概念与进程状态

    在通常的计算机书籍或者课本中对进程概念的描述是这样的 – 进程就是被加载到内存中的程序,或者被运行起来的程序就叫做进程 ;这样说的原因如下: 首先,从 【Linux】计算机的软硬件体系结构 中我们知道,为了提高计算机的整体效率,在数据层面,CPU 不会直接和外设

    2024年02月02日
    浏览(34)
  • Linux进程概念及其状态

    我们的一个程序要运行起来,要先加载到内存当中,如果这个程序已经加载到了内存当中,那么这就叫一个进程。 如图演示一个简单的进程: Windows所打开的一些进程: 我们每次在开机的时候,需要等个几秒钟,这个过程其实就是将操作系统从外设加载内存当中 我们每次使

    2024年02月10日
    浏览(29)
  • linux——进程的概念与状态

    大家好,我是旗帜僵尸。今天我将带领大家学习进程的概念。 本篇文章将继续收录于我的linux专栏中,若想查看关于linux其它知识的文章也可以点击右方链接。旗帜僵尸——linux 如上图所示,冯诺依曼体系结构将计算机划分为3部分,分别是 CPU 、 存储器 、 I/O设备 运行速度:

    2023年04月26日
    浏览(23)
  • Linux 创建子进程

    在计算机科学中,进程(Process)、线程(Thread)和程序(Program)是三个关键概念,它们在操作系统和并发编程中扮演重要角色。 程序 (Program): 是一系列按照特定顺序编写的指令集合,用于实现特定任务。程序是静态的,通常以文本文件的形式存储在磁盘上。例如,计算器

    2024年02月14日
    浏览(28)
  • 【Linux初阶】fork进程创建 & 进程终止 & 进程等待

     🌟hello,各位读者大大们你们好呀🌟 🍭🍭系列专栏:【Linux初阶】 ✒️✒️本篇内容:fork进程创建,理解fork返回值和常规用法,进程终止(退出码、退出场景、退出方法、exit),进程等待(wait、waitpid),阻塞等待和非阻塞等待 🚢🚢作者简介:本科在读,计算机海洋

    2024年02月06日
    浏览(33)
  • Linux------进程的fork()详解

    目录 前言 一、fork()的使用 二、fork()的返回值 我们为什么要创建子进程? 父进程与子进程的分流 三、fork的一些难理解的问题 1.fork干了什么事情? 2.fork为什么会有两个返回值  3.fork的两个返回值,为什么会给父进程返回子进程pid,给子进程返回0? 4.fork之后,父子进程谁先

    2024年01月18日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包