Linux进程概念(二)

上期我们已经学习了进程的基础的内容,已经对进程的基本概念有了了解,知道了进程的组成, 本期我们将以操作为主进一步探讨进程的相关概念。 

目录

查看进程

创建进程


查看进程

查看进程主要有两种方式。

ps ajx指令

在当前目录下有名为test的可执行文件。

可执行文件test被加载到内存之后运行便成为了进程,所以也有其独有的进程id编号。我们可以通过ps ajx指令查看名为test的进程。

ls  /proc指令

 可以理解为所有进程都是一个目录,目录的名称就是每个进程的pid。

 ctrl+c可以终止当前进程。

创建进程

进程的创建,为操作系统自动创建和程序员自己通过对应的函数进行创建。操作系统自动创建即代码编译之后形成可执行程序,然后直接运行程序之后变成进程。不过这不是我们本期讨论的重点,本期的重点是我们如何使用函数自己创建进程。 

fork函数:使用fork函数创建子进程。

  #include<iostream>    
  #include<unistd.h>    
  using namespace std;    
  int main()    
  {    
   //创建子进程    
   int id=fork();    
   cout<<"hello world"<<endl;    
   return 0; 
  }

 分析上述代码,我们预期的结果应该打印一行“hello world”。运行结果如下:

通过运行接过我们可以看到,竟然打印了两行“hello world ”,这究竟是为什么呢?这就是fork()函数的功劳,fork()函数在当前进程下,创建了子进程。子进程继承了父进程的task_struct(进程控制块),因为进程控制块里面有内存指针,内存指针指向了父进程的代码和数据,子进程继承父进程的内存指针之后,也可以去访问父进程的代码和数据,所以父进程的代码和数据对于子进程而言是共享的,但是对于数据而言,当父子进程其中一个进程要进行修改时,要进行写时拷贝的操作。所以说了这么多,其实就是当前进程创建了子进程之后,子进程也执行了创建函数fork()函数之后的代码。所以才会打印两份“hello world”。

fork函数返回值:创建子进程之后,对子进程返回0,对父进程返回子进程的pid,创建进程失败返回值小于0。 

#include<iostream>
#include<unistd.h>
using namespace std;
int main()
{
//创建子进程
  int id=fork();
  if(id ==0)
  {
   //子进程
  cout<< "I am child "<<getpid()<<endl;
  }
  else
  {
    //父进程
    cout<<id<<endl;
    cout<<"I am parent "<<getpid()<<endl;
  }
 return 0;
}

 代码运行结果如下:

可见,先运行了父进程,然后运行了子进程。那么问题来了,整个代码执行的过程是怎么样的呢?在fork函数创建完子进程之后,父进程和子进程到底谁先执行呢?

1.在fork函数创建完进程之后,会返回函数的返回值,但是返回函数返回值之前,由于子进程已经创建,此时进程控制块中的上下文数据发挥了作用,即父进程执行完了fork函数,所以子进程要执行也得从fork函数执行完之后的下一句代码开始执行。

2.父子进程没有先后的执行顺序,主要看操作系统中调度器调度的策略,父子进程没有绝对的先后执行顺序。

进程的基本概念至此已经全部结束,后期我们将进一步探讨进程相关的操作。

本期内容到此结束^_^

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Canvas绘制图片和区域

如何使用Canvas在图片上绘制区域&#xff1f; 一. 首先&#xff0c;我们需要初始化三个canvas画布&#xff08;初始化Canvas&#xff09; initCanvas() {// 初始化canvas画布let canvasWrap document.getElementsByClassName("canvas-wrap");this.wrapWidth canva…

更改ip后还被封是ip质量的原因吗?

不同的代理IP的质量相同&#xff0c;一般来说可以根据以下几个因素来进行判断&#xff1a; 1.可用率 可用率就是提取的这些代理IP中可以正常使用的比率。假如我们无法使用某个代理IP请求目标网站或者请求超时&#xff0c;那么就代表这个代理不可用&#xff0c;一般来说免费代…

ubuntu18.04 编译HBA 并实例运行

HBA是一个激光点云层级式的全局优化的程序&#xff0c;他的论文题目是&#xff1a;HBA: A Globally Consistent and Efficient Large-Scale LiDAR Mapping Module&#xff0c;对应的github地址是&#xff1a;HKU-Mars-Lab GitHub 学习本博客&#xff0c;可以学到gtsam安装&am…

Vienna 整流器的基本原理及数学模型

2.1 Vienna 整流器基本工作原理 2.1.1 主电路拓扑结构分析 Vienna 整流器系统的主电路包含用于升压的三相电感、三相桥臂和两个直流侧均压电容。通过有规律的对双向开关进行控制不仅能实现功率双向流动&#xff0c;还能使网侧电流时刻跟踪电网电压&#xff0c;使系统运行在高…

昇思25天学习打卡营第5天|网络构建

一、简介&#xff1a; 神经网络模型是由神经网络层和Tensor操作构成的&#xff0c;mindspore.nn提供了常见神经网络层的实现&#xff0c;在MindSpore中&#xff0c;Cell类是构建所有网络的基类&#xff08;这个类和pytorch中的modul类是一样的作用&#xff09;&#xff0c;也是…

陀螺仪LSM6DSV16X与AI集成(7)----FIFO数据读取与配置

陀螺仪LSM6DSV16X与AI集成.7--检测自由落体 概述视频教学样品申请源码下载主要内容生成STM32CUBEMX串口配置IIC配置CS和SA0设置串口重定向参考程序初始换管脚获取ID复位操作BDU设置设置量程设置FIFO水印设置速率使用流模式设置FIFO时间戳批处理速率使能时间戳FIFO状态寄存器演示…

Mathtype7在Word2016中闪退(安装过6)

安装教程&#xff1a;https://blog.csdn.net/Little_pudding10/article/details/135465291 Mathtype7在Word2016中闪退是因为安装过Mathtype6&#xff0c;MathPage.wll和MathType Comm***.dotm)&#xff0c;不会随着Mathtype的删除自动删除&#xff0c;而新版的Mathtype中的文件…

【从0实现React18】 (三) 初探reconciler 带你初步探寻React的核心逻辑

Reconciler 使React核心逻辑所在的模块&#xff0c;中文名叫协调器&#xff0c;协调(reconciler)就是diff算法的意思 reconciler有什么用&#xff1f; 在前端框架出现之前&#xff0c;通常会使用 jQuery 这样的库来开发页面。jQuery 是一个过程驱动的库&#xff0c;开发者需要…

Django 模版过滤器

Django模版过滤器是一个非常有用的功能&#xff0c;它允许我们在模版中处理数据。过滤器看起来像这样&#xff1a;{{ name|lower }}&#xff0c;这将把变量name的值转换为小写。 1&#xff0c;创建应用 python manage.py startapp app5 2&#xff0c;注册应用 Test/Test/sett…

【git1】指令,commit,免密

文章目录 1.常用指令&#xff1a;git branch查看本地分支&#xff0c; -r查看远程分支&#xff0c; -a查看本地和远程&#xff0c;-v查看各分支最后一次提交, -D删除分支2.commit规范&#xff1a;git commit进入vi界面&#xff08;进入前要git config core.editor vim设一下vi模…

Java项目:基于SSM框架实现的精品酒销售管理系统分前后台【ssm+B/S架构+源码+数据库+毕业论文】

一、项目简介 本项目是一套基于SSM框架实现的精品酒销售管理系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单、功…

【break】大头哥哥做题

【break】大头哥哥做题 时间限制: 1000 ms 内存限制: 65536 KB 【题目描述】 【参考代码】 #include <iostream> using namespace std; int main(){ int sum 0;//求和int day 0;//天数 while(1){int a;cin>>a;if(a-1){break;//结束当前循环 }sum sum a; …

121.网络游戏逆向分析与漏洞攻防-邮件系统数据分析-邮件读取与发送界面设计

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果 现在的代码都是依据数据包来写的&#xff0c;如果看不懂代码&#xff0c;就说明没看懂数据包…

Nginx+Lua+Redis 实现Nginx301跳转配置管理

业务场景需求 long long ago&#xff1a; 在项目的运维过程中有一次SEO团队提出 网页的URL 中如果可以带上关键字&#xff0c;那么网页在各大搜索引擎中收录和排名有非常重大的突出优势&#xff08;~~SEO团队到底专不专业 ~~&#xff0c;此处不做置评&#xff09;&#xff0c;…

C/C++ strftime函数

目录 strftime()函数 函数原型 头文件 功能 返回值 参数 案例 结语 strftime()函数 函数原型 size_t strftime(char *s, size_t max, const char *format, const struct tm *tm); 头文件 #include <time.h> 功能 用于日期和时间格式化的函数&#xff0c;它允许你…

【算法】二叉树 - 理论基础

1.种类 1.1 满二叉树 只有度为0和2的节点&#xff0c;且度为0的节点都都在同一层。深度为k&#xff0c;有2^k-1个节点。 1.2 完全二叉树 在完全二叉树中&#xff0c;除了最底层节点可能没填满外&#xff0c;其余每层节点数都达到最大值&#xff0c;并且最下面一层的节点都…

【论文复现|智能算法改进】一种基于多策略改进的鲸鱼算法

目录 1.算法原理2.改进点3.结果展示4.参考文献5.代码获取 1.算法原理 SCI二区|鲸鱼优化算法&#xff08;WOA&#xff09;原理及实现【附完整Matlab代码】 2.改进点 混沌反向学习策略 将混沌映射和反向学习策略结合&#xff0c;形成混沌反向学习方法&#xff0c;通过该方 法…

Atcoder Beginner Contest 359

传送门 A - Count Takahashi 时间限制&#xff1a;2秒 内存限制&#xff1a;1024MB 分数&#xff1a;100分 问题描述 给定 N 个字符串。 第 i 个字符串 () 要么是 Takahashi 要么是 Aoki。 有多少个 i 使得 等于 Takahashi &#xff1f; 限制 N 是整数。每个…

Cyber Weekly #12

赛博新闻 1、Anthropic发布Claude 3.5 Sonnet 本周五&#xff08;6月21日&#xff09;凌晨&#xff0c;Anthropic宣布推出其最新的语言模型Claude 3.5 Sonnet&#xff0c;距离上次发布Claude3才过去3个月。Claude3.5拥有20万token的长上下文窗口&#xff0c;目前已经在Claude…

数据库断言

在数据库验证断言 目的&#xff1a;不能相信接口返回结果&#xff0c;通过到数据库检验可知接口返回结果是否真的正确 如何校验&#xff1a;代码与mymql建立网络连接&#xff0c;操作数据库&#xff0c;断开连接 代码&#xff1a;java操作数据库 pom文件配置依赖 步骤&…