【Liunx】进程概念,查看进程,进程调用,创建子进程

news2024/9/30 19:42:02

进程

  • 1.什么是进程
  • 2.查看进程
  • 3.常见进程调用
  • 4.创建子进程

1.什么是进程

以前我们在书上或者其他途径了解到进程的概念。

一个运行起来(加载到内存)的的程序叫做进程。
在内存中的程序叫做进程。
进程与程序相比具有动态属性。

这里的概念比较抽象,没有那么容易理解,下面对进程到底是什么做了详细解答。

程序的本质是文件,文件是在磁盘上放着的。
当我们的可执行程序要运行的时候,会由磁盘将程序代码和数据加载到内存中,然后在由cpu去执行,如果只有一个程序还还好说,但是内存不可能只放一个程序的代码和数据。

内存中有太多加载进来的程序,操作系统要不要管理加载进来的多个程序呢?
肯定是要的。

在这里插入图片描述

怎么管理?
先描述,在组织。

进而引出了PCB(进程控制块),

在这里插入图片描述
然后在用特定的数据结构,把PCB连接起来。

在这里插入图片描述
所谓对进程的管理,变成了对进程对应的PCB进行相关的管理。

当cpu要这个程序时,就去pcb找然后把对应的代码和数据拿给cpu。当执行完这个程序时,再由pcb找到该进程对应的代码和数据,然后释放。最后在处理这个pcb。

注意struct tast_struct 这个内核结构体,是由操作系统提供的,用来描述进程的结构体,当程序加载到内存时,操作系统很快就生成进程对应的pcb,然后在链接起来。

总结:
进程 = 内核数据结构(task_struct)+ 进程对应的磁盘代码

为什么会有PCB结构体呢?
上述内容就可以回答这个问题。

2.查看进程

ls /proc    //查看所有进程

在这里插入图片描述

ps ajx //查看所有进程

在这里插入图片描述

ps ajx | grep 'mytest'  //查看指定进程

在这里插入图片描述

ps ajx | head -1  //查看进程属性

在这里插入图片描述

ps ajx | head -1 && ps ajx | grep 'mytest'  //常用查看进程指令

在这里插入图片描述

kill -9 进程编号  //杀死进程

在这里插入图片描述

进程在调度运行的时候,进程具有动态属性

3.常见进程调用

进程id(PID)
父进程id(PPID)

getpid()  //获得进程id
getppid() //获得父进程id
   #include<stdio.h>
   #include<unistd.h>
   
   
   int main()
   {
      while(1)
      {
          printf("我是一个进程,我的进程id : %d  父进程id :%d  \n",getpid(),getppid());                                                                            
          sleep(1);
      }
   
       return 0;
   }


在这里插入图片描述

在这里插入图片描述

对比上面两张图片,发现父进程的id没有变。

pid是进程id,ppid是父进程id;那么父进程到底是谁呢?

在这里插入图片描述

命令行上启动的进程,都是子进程,一般它的父进程没有特殊情况的话,都是bash(命令行解释器shell)

当我们登录linux时,操作系统就给我指定了一个shell,主要怕进程出现了问题导致shell不能用了,所以如果子进程出现问题,就会提示,不会影响到shell,那么就可以通过shell去修改。

4.创建子进程

我们来通过man fork认识一下fork

在这里插入图片描述
fork创建一个子进程,返回值是pid_t。

那我们来用一下这个函数。

fork是一个函数----函数执行前,只有一个进程;函数执行后,父进程+子进程

 int main()
 {
	pid_t id=fork();
	if(id == 0)
	{
		//子进程
		while(1)
        {
             printf("我是子进程,我的id : %d, 父进程id : %d, ret : %d\n",getpid(),getppid(),id);
             sleep(1);
         }
            
	 }
     else if(id > 0)
  	 {
		//父进程
        while(1)                                                                                                                                               
        {
             printf("我是父进程,我的id : %d, 父进程id : %d, ret : %d\n",getpid(),getppid(),id);
             sleep(3);
         }
      }
      else
      {
           	perror("fork fail\n");
            return 1;
      }
        return 0;
}                                        

在这里插入图片描述
在这里插入图片描述
成功创建子进程,子进程的id就会返回给父进程,0返回给子进程,创建失败,返回错误。

看到这里大家马上就有疑问了

1.根据前面掌握C语言的知识,if else语句只能执行一次,并且while是一个死循环,怎么能跳出循环执行其它的?

2.同一个变量id,在后续没有修改的情况下,竟然有不同内容!

在后面进程地址空间没有讲,这里没有办法解释清楚,到那里在讲。

这里浅浅总结一下:
1.fork之后,会有父进程+子进程两个进程在执行后续代码
2.fork后续的代码,被父子进程共享
3.通过返回值不同,让父子进程执行后续共享代码的一部分。

通过fork我们就可以进行多线程的任务了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/983918.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Task :app:compileDebugKotlin FAILED

gradle.properties 里面加上 android.enableJetifiertrue

PyCharm下载安装

PyCharm下载链接 点击下载PyCharm Community Edition社区版&#xff08;PyCharm Professional专业版需要收费&#xff0c;但可以免费试用 30 天&#xff0c;也可以找到激活方式&#xff1b;而社区版是完全免费的&#xff0c;初学者学习 Python建议使用社区版&#xff0c;不会有…

Android studio自定义输出编译apk的名称

//输出apk名称android.applicationVariants.all { variant ->variant.outputs.all {//com.android.app-debug-1.0.apkoutputFileName "${variant.applicationId}-${variant.name}-${variant.versionName}.apk"//debug-1.0.apkoutputFileName "${variant.na…

内网穿透的应用-不再依赖iCloud!利用群晖生态,自己掌控本地SSD的云存储!

文章目录 前言本教程解决的问题是&#xff1a;按照本教程方法操作后&#xff0c;达到的效果是想使用群晖生态软件&#xff0c;就必须要在服务端安装群晖系统&#xff0c;具体如何安装群晖虚拟机请参考&#xff1a; 1. 安装并配置synology drive1.1 安装群辉drive套件1.2 在局域…

2023-python-解释器是什么东西?

传送门 对比学习一下&#xff1a; 下面的是编译型&#xff0c;比如c等&#xff1b; 先compiler编译成二进制形式的目标文件&#xff08;Object File&#xff09;&#xff0c;然后链接起来&#xff1b; 解释型python: 解释器的compiler对正在运行中的文件中的代码进行一个 词法…

一文彻底理解什么是同步和异步!

相信很多同学遇到同步异步这两个词的时候大脑瞬间就像红绿灯失灵的十字路口一样陷入一片懵逼的状态&#xff1a; 是的&#xff0c;这两个看上去很像实际上也很像的词汇给博主造成过很大的困扰&#xff0c;这两个词背后所代表的含义到底是什么呢&#xff1f; 我们先从工作场景…

C++项目实战——基于多设计模式下的同步异步日志系统-②-相关技术补充(不定参函数)

文章目录 专栏导读不定参函数C风格不定参函数不定参宏函数 专栏导读 &#x1f338;作者简介&#xff1a;花想云 &#xff0c;在读本科生一枚&#xff0c;C/C领域新星创作者&#xff0c;新星计划导师&#xff0c;阿里云专家博主&#xff0c;CSDN内容合伙人…致力于 C/C、Linux 学…

【autodesk】浏览器中渲染rvt模型

使用Forge完成渲染 Forge是什么 为什么能够渲染出来rvt模型 Forge是由Autodesk开发的一套云端开发平台和工具集。在Forge平台中&#xff0c;有一个名为"Model Derivative"的服务&#xff0c;它可以将包括RVT&#xff08;Revit&#xff09;在内的多种BIM&#xff08…

【无线电力传输】12 V 直流风扇无线电力传输系统的实现(Simulink)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

华为OD机试 - 最长的指定瑕疵度的元音子串 - 正则表达式(Java 2023 B卷 200分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#…

高速电路设计笔记----第一章

一、需求。 1、电路设计首先要做的是明确需求。 2、明确需求后需要对CPU进行选型、电源的选型、退耦电容选型。 3、画原理图需要兼顾PCB上的器件布局。中间电阻电容如果是靠近下一级&#xff0c;在原理图中画的时候也应该是靠近下一级处画。 4、按照PCB上电容的排列顺序绘制…

Java复习-25-单例设计模式

单例设计模式 目的&#xff08;使用场景&#xff09; 在实际开发下&#xff0c;会存在一种情况&#xff1a;某一种类在程序的整个生命周期中&#xff0c;只需要实例化一次就足够了。例如&#xff0c;系统数据类&#xff0c;由于操作系统只有一个&#xff0c;因此在程序初始化…

【PMO项目管理】深入了解项目管理 | Stakeholder 利益相关者 | 利益相关者之间的立场差异

&#x1f4ad; 写在前面&#xff1a;本文将带您深入了解项目管理的核心概念和关键要素。我们将从项目管理的基本理解开始&#xff0c;逐步探讨其领域、复杂性和变化的重点&#xff0c;以及项目管理的具体过程。我们还将研究项目的性质以及成功项目所必备的条件。在此过程中&…

PandaGPT部署演示

PandaGPT 是一种通用的指令跟踪模型&#xff0c;可以看到和听到。实验表明&#xff0c;PandaGPT 可以执行复杂的任务&#xff0c;例如生成详细的图像描述、编写受视频启发的故事以及回答有关音频的问题。更有趣的是&#xff0c;PandaGPT 可以同时接受多模态输入并自然地组合它们…

ClickHouse 存算分离改造:小红书自研云原生数据仓库实践

ClickHouse 作为业界性能最强大的 OLAP 系统&#xff0c;在小红书内部被广泛应用于广告、社区、直播和电商等多个业务领域。然而&#xff0c;原生 ClickHouse 的 MPP 架构在运维成本、弹性扩展和故障恢复方面存在较大局限性。为应对挑战&#xff0c;小红书数据流团队基于开源 C…

C++提高篇:深入理解纯虚函数和抽象类

在C中&#xff0c;纯虚函数和抽象类是面向对象编程中重要的概念。本文将会深入探讨这两个概念的含义、如何定义和使用它们&#xff0c;以及它们在实际开发中的应用。 一、什么是纯虚函数&#xff1f; 在C中&#xff0c;纯虚函数是指在基类中声明但没有实现的虚函数。纯虚函数的…

算法通关村第十七关:青铜挑战-贪心其实很简单

青铜挑战-贪心其实很简单 1. 难以解释的贪心算法 贪心学习法则&#xff1a;直接做题&#xff0c;不考虑贪不贪心 贪心(贪婪)算法 是指在问题尽心求解时&#xff0c;在每一步选择中都采取最好或者最优&#xff08;最有利&#xff09;的选择&#xff0c;从而希望能够导致结果最…

zabbix -- 安装

Zabbix zabbix除了可以监控linux服务器之外&#xff0c;还可以监控路由器、交换机、容器等&#xff0c;全方位监控 Zabbix对服务器的监控是通过在服务器上部署“间谍”程序zabbix-agent获取数据&#xff0c;但对于路由器、交换机等机器的监控不能进行部署&#xff0c;这个时候…

空气净化器上亚马逊美国站需要办理什么认证?空气净化器UL867测试报告如何办理?

空气净化器又称“空气清洁器”、空气清新机、净化器&#xff0c;是指能够吸附、分解或转化各种空气污染物&#xff08;一般包括PM2.5、粉尘、花粉、异味、甲醛之类的装修污染、细菌、过敏原等&#xff09;&#xff0c;有效提高空气清洁度的产品&#xff0c;主要分为家用 、商用…

高忆管理:六连板捷荣技术或难扛“华为概念股”大旗

在本钱商场上名不见经传的捷荣技术&#xff08;002855.SZ&#xff09;正扛起“华为概念股”大旗。 9月6日&#xff0c;捷荣技术已拿下第六个连续涨停板&#xff0c;短短七个生意日&#xff0c;股价累积涨幅逾越90%。公司已连发两份股票生意异动公告。 是炒作&#xff0c;还是…