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.mzph.cn/bicheng/32763.shtml

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

相关文章

SpringBoot-注解@ImportResource引入自定义spring的配置xml文件和配置类

1、注解ImportResource 我们知道Spring的配置文件是可以有很多个的&#xff0c;我们在web.xml中如下配置就可以引入它们&#xff1a; SprongBoot默认已经给我们配置好了Spring&#xff0c;它的内部相当于已经有一个配置文件&#xff0c;那么我们想要添加新的配置文件怎么办&am…

SkyWalking 极简入门

1. 概述 1.1 概念 SkyWalking 是什么&#xff1f; FROM Apache SkyWalking 分布式系统的应用程序性能监视工具&#xff0c;专为微服务、云原生架构和基于容器&#xff08;Docker、K8s、Mesos&#xff09;架构而设计。 提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体…

【CSS in Depth 2 精译】1.5 渐进式增强

文章目录 1.5 渐进式增强1.5.1 利用层叠规则实现渐进式增强1.5.2 渐进式增强的选择器1.5.3 利用 supports() 实现特性查询启用浏览器实验特性 1.5 渐进式增强 要用好 CSS 这样一门不断发展演进中的语言&#xff0c;其中一个重要的因素就是要与时俱进&#xff0c;及时了解哪些功…

AI 大模型企业应用实战(09)-LangChain的示例选择器

1 根据长度动态选择提示词示例组 1.1 案例 根据输入的提示词长度综合计算最终长度&#xff0c;智能截取或者添加提示词的示例。 from langchain.prompts import PromptTemplate from langchain.prompts import FewShotPromptTemplate from langchain.prompts.example_selecto…

PADS学习笔记

1.PADS设计PCB流程 封装库&#xff08;layout&#xff09;&#xff0c;原理图库&#xff08;logic&#xff09;的准备原件封装的匹配&#xff08;logic&#xff09;原理图的绘制&#xff08;logic&#xff09;导网表操作&#xff08;logic&#xff09;导入结构&#xff08;lay…

C++系列-String(一)

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” string是用于字符串&#xff0c;可以增删改查 首先&#xff0c;我们来看一下string的底层 接下来&#xff0c;我们来看一下string的常用接口有哪些&#xff1a; #define _CRT_S…

【机器学习】音乐大模型的深入探讨——当机器有了创意,是机遇还是灾难?

&#x1f440;国内外音乐大模型基本情况&#x1f440; ♥概述♥ ✈✈✈如FreeCompose、一术科技等&#xff0c;这些企业专注于开发人工智能驱动的语音、音效和音乐生成工具&#xff0c;致力于利用核心技术驱动文化产业升级。虽然具体公司未明确提及&#xff0c;但可以预见的是…

拓扑排序——C语言

拓扑排序&#xff08;Topological Sorting&#xff09;是一种用于有向无环图&#xff08;DAG&#xff09;的排序算法&#xff0c;其输出是图中所有顶点的线性排序&#xff0c;使得对于每条有向边 (u, v)&#xff0c;顶点 u 在 v 之前出现。拓扑排序确定了项目网络图中的起始事件…

c++精解【5】

文章目录 Eigen矩阵元素定义矩阵加法矩阵乘法向量编译时设置大小 poco名言基础 Eigen 矩阵元素定义 定义每个元素值 [ 1 3 2 4 ] \begin{bmatrix} 1& 3 \\2& 4 \end{bmatrix} [12​34​] #include <iostream> #include "f:/learn/eigen-3.4.0/Eigen/Den…

Prompt 写作提示经验:完整格式和技巧

编写prompt以确保输出格式通常需要明确指定您期望的输出结构和内容要求。以下是一些确保输出格式的步骤和技巧&#xff1a; 明确指定格式&#xff1a;在prompt中明确指出您期望的输出格式。例如&#xff0c;如果您需要一个包含标题、子标题和段落的文章&#xff0c;应在prompt中…

大电流一体成型电感CSEB1350系列,助力实现DC-DC转换器小尺寸、高效率

DC-DC转换器 , 转换器 , 科达嘉 DC-DC转换器作为一种电压转换装置&#xff0c;在电子产品、电源系统、工业控制、新能源等领域广泛应用。。。 DC-DC转换器作为一种电压转换装置&#xff0c;在电子产品、电源系统、工业控制、新能源等领域广泛应用。随着各行业用户对DC-DC转换器…

Appium + Python App自动化第一个脚本

今天跟大家讲解一个Appium和Python App自动化的脚本。 【1】打开你的夜神模拟器&#xff08;或者连接你的手机&#xff09; 【2】打开桌面的Appium 【3】下载你要测的App的apk文件&#xff0c;放到桌面 【4】拖动你的apk安装包到夜神模拟器里&#xff0c;然后模拟器会提示你…

redHat9 安装 docker、docker-compose、iptables 过程记录

1. 确认 Linux 版本&#xff1a; cat /etc/redhat-release 我这里显示&#xff1a;Red Hat Enterprise Linux release 9.2 (Plow)2. 准备 docker 离线安装包&#xff1a; 我这里是从阿里云开源镜像站 https://mirrors.aliyun.com/docker-ce/linux/static/stable/x86_64/ 提…

动手学深度学习(Pytorch版)代码实践 -计算机视觉-36图像增广

6 图片增广 import matplotlib.pyplot as plt import numpy as np import torch import torchvision from d2l import torch as d2l from torch import nn from PIL import Image import liliPytorch as lp from torch.utils.data import Dataset, DataLoaderplt.figure(cat)…

B站大模型指令微调入门实战(完整代码),一键打造你的数字分身

前两天&#xff0c;想导出微信聊天记录&#xff0c;于是搞了个小工具。 感兴趣的小伙伴&#xff0c;可以回看&#xff1a; 微信聊天记录导出为电脑文件实操教程&#xff08;附代码&#xff09; 一键获取所有微信聊天记录&#xff08;附PyQT6入门实战&#xff09; 拿到这些数…

yq 配置文件格式转换工具

在现代开发和运维的世界中&#xff0c;处理和转换不同格式的数据文件如 YAML、JSON、XML、CSV 等是日常任务。文件格式的多样性和复杂性常常给开发者带来不小的挑战。在这种情况下&#xff0c;强大的命令行工具能够极大地简化工作流程&#xff0c;本文主要介绍一款基于Go实现处…

docker中mysql突然无法连接设置

参考地址解决&#xff1a;连接不上 docker中的mysql_thinkphp6 连不上 docker mysql-CSDN博客

Python中使用PyQT5库时报错:没有Qt平台插件可以初始化

一、发现问题&#xff1a;无限易pythonGo打开执行的时候报&#xff1a;“没有Qt平台插件可以初始化&#xff0c;请重新安装应用程序。”的错误&#xff0c;点击确定后无限易崩溃闪退。 二、解决问题&#xff1a; 1、重新安装依赖&#xff0c;打开CMD输入pip list&#xff0c;查…

Leetcode3185. 构成整天的下标对数目 II

Every day a Leetcode 题目来源&#xff1a;3185. 构成整天的下标对数目 II 解法1&#xff1a;哈希 本质思路类同经典的“两数之和”。枚举右&#xff0c;用哈希表维护左。 枚举 j&#xff0c;并维护 cnt[x] 表示所有满足 i < j 的下标 i 中&#xff0c;有几个 hours[i]…

初识 SpringMVC,运行配置第一个Spring MVC 程序

1. 初识 SpringMVC&#xff0c;运行配置第一个Spring MVC 程序 文章目录 1. 初识 SpringMVC&#xff0c;运行配置第一个Spring MVC 程序1.1 什么是 MVC 2. Spring MVC 概述2.1 Spring MVC 的作用&#xff1a; 3. 运行配置第一个 Spring MVC 程序3.1 第一步&#xff1a;创建Mave…