104.进程创建

目录

进程创建相关的函数

获取当前进程的进程ID(PID)

获取当前进程的父进程ID(PPID)

创建一个新的进程

fork()剖析 

调用格式

创建子进程

子进程与父进程

父子进程执行流

代码演示


进程创建相关的函数

        Linux中进程ID为pid_t类型,其实本质就是一个正整数,通过ps aux命令可以得到验证。pid为1的进程是Linux系统中创建的第一个进程。

获取当前进程的进程ID(PID)

#include <sys/types.h>
#include <unistd.h>
pid_t getpid(void);

获取当前进程的父进程ID(PPID)

#include <sys/types.h>
#include <unistd.h>
pid_t getppid(void);

创建一个新的进程

#include <unistd.h>
pid_t fork(void);

fork()剖析 

   fork() 是一个用于在 Unix 和类 Unix 操作系统上创建新进程的系统调用。在 fork() 被调用时,它会创建一个当前进程的副本,这个副本称为子进程,而调用 fork() 的进程称为父进程。以下是关于 fork() 的一些剖析:

调用格式

#include <unistd.h>
pid_t fork(void);
  • 返回值:在父进程中,fork() 返回子进程的进程ID;在子进程中,返回0;如果出错,返回-1。

创建子进程

        当 fork() 被调用时,操作系统会复制父进程的地址空间、文件描述符等信息,创建一个全新的子进程。父进程和子进程之间的区别在于,fork() 返回的值不同。

子进程与父进程

  • 子进程的资源(如文件描述符、内存内容)是父进程的副本,但是它们在内存中拥有不同的地址空间。这意味着父进程和子进程之间的变量是相互独立的。
  • 子进程会继承父进程的打开文件描述符,但是它们是独立的,关闭一个在父进程中打开的文件并不会影响子进程中的文件。

父子进程执行流

  • 父进程和子进程同时开始执行 fork() 后的代码。它们的执行流是相互独立的。
  • 在父子进程中,fork() 返回的值是不同的:在父进程中返回子进程的ID,在子进程中返回0。

代码演示

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>int main()
{// 在父进程中创建子进程pid_t pid = fork();printf("当前进程fork()的返回值: %d\n", pid);if (pid > 0){// 父进程执行的逻辑printf("我是父进程, pid = %d\n", getpid());}else if (pid == 0){// 子进程执行的逻辑printf("我是子进程, pid = %d, 我爹是: %d\n", getpid(), getppid());}else // pid == -1{// 创建子进程失败了}// 不加判断, 父子进程都会执行这个循环for (int i = 0; i < 5; ++i){printf("%d\n", i);}return 0;
}

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

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

相关文章

『亚马逊云科技产品测评』活动征文|AWS云服务器EC2实例实现ByConity快速部署

授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 前言 亚马逊是全球最大的在线零售商和云计算服务提供商。AWS云服务器在…

vscode 配置 —— snippets、todo tree

一、snippets snippets 主要用于在进行文件及函数进行注释说明时&#xff0c;一键生成自定义格式注释 使用。 1.1 点击 vscode 设置&#xff0c;选择 User Snippets 1.2 编辑 code-snippets 文件 以C 文件注释为例&#xff0c;文件作用注释 fun_cpp_file.code-snippets &am…

新版IDEA中,module模块无法被识别,类全部变成咖啡杯无法被识

新版IDEA中&#xff0c;module模块无法被识别&#xff0c;类全部变成咖啡杯无法被识 如下图&#xff1a; 解决方法&#xff1a;java的Directory文件没有被设置为根目录&#xff0c;解决方法如下&#xff1a; 这是方法之一&#xff0c;还有很多的原因 可能的原因&#xff1a; …

简单实现Spring容器(二)

阶段2: // 1.编写自己的Spring容器,实现扫描包,得到bean的class对象.2.扫描将 bean 信息封装到 BeanDefinition对象,并放入到Map.思路: 1.将 bean 信息封装到 BeanDefinition对象中,再将其放入到BeanDefinitionMap集合中,集合的结构大概是 key[beanName]–value[beanDefintion…

【C语言】函数递归--输出n的k次方

题目描述&#xff1a; 递归实现n的k次方 代码如下&#xff1a; #include<stdio.h> int nk(int n, int k) {if (k > 0)return n * nk(n, k - 1); } int main() {int ret 0;int n 0;int k 0;scanf("%d", &n);scanf("%d", &k);ret nk(n…

java中用thumbnailator依赖写一个压缩图片的类,只要图片大小超过1M就无线循环下去的详细代码实例?

下面是使用thumbnailator依赖编写的一个压缩图片类的详细代码示例&#xff0c;该类会对大小超过1MB的图片进行无限循环压缩。 java Copy code import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import …

LeetCode 300 最长递增子序列

华为二面出的这个题&#xff0c;非常经典的动态规划题目.... 还是刷题太少了&#xff0c;不然的话应该是能刷到的 针对这道题有一些感悟 1、回溯记忆化搜索动态规划&#xff08;这句话仍然是适用的&#xff09; 回溯本质上是一种暴力解法 可以通过以下两种方式进行时间复杂…

【数据库】树形数据组织架构下的封锁并发控制,B树索引并发访问控制,树协议原理及案例分析

数据库并发访问树协议 ​专栏内容&#xff1a; 手写数据库toadb 本专栏主要介绍如何从零开发&#xff0c;开发的步骤&#xff0c;以及开发过程中的涉及的原理&#xff0c;遇到的问题等&#xff0c;让大家能跟上并且可以一起开发&#xff0c;让每个需要的人成为参与者。 本专栏会…

在远程构建git仓库后,本地git仓库建立常用基本操作

这是gitlab新建仓库以后的官方提示&#xff0c;感觉非常有用&#xff1a; 注&#xff1a; 假设项目名称叫 demo1 ssh 路径为&#xff1a;ssh://git10.229.28.94:8081/your_name/demo1.git Command line instructions You can also upload existing files from your computer …

十六、FreeRTOS之FreeRTOS队列集

本节需要掌握以下内容&#xff1a; 1&#xff0c;队列集简介&#xff08;了解&#xff09; 2&#xff0c;队列集相关API函数介绍&#xff08;熟悉&#xff09; 3&#xff0c;队列集操作实验&#xff08;掌握&#xff09; 一、队列集简介&#xff08;了解&#xff09; 一个…

UVa489刽子手游戏题解

题目 编译一个程序判断参赛者赢了&#xff08;You win.&#xff09;、输了&#xff08;You lose.&#xff09;、放弃了&#xff08;You chickened out.&#xff09;.规则为机器提供一个单词&#xff0c;参赛者每次可以猜一个字母&#xff0c;若单词中含有这个字母&#xff0c;…

添加新公司代码的配置步骤-Part2

原文地址&#xff1a;配置公司代码 概述 在第一部分中&#xff0c;我讨论并列出了在 SAP 中构建新公司代码时企业结构部分所需的任务。在这篇博客中&#xff0c;我将列出并讨论 FI 模块中需要配置的内容。您还记得本主题涵盖六个部分。 企业结构 - 第 1 部分 FI 配置– 第 2…

【Linux】diff命令使用

diff命令 是一个用于比较两个文件或目录之间差异的命令。它可以显示两个文件之间的行级别差异&#xff0c;并以易于阅读的格式输出结果。 著者 由保罗艾格特、迈克海特尔、大卫海耶斯、理查德史泰尔曼和Len Tower撰写。 diff命令 -Linux手册页 语法 diff [选项] [文件1]…

【java设计模式】——代理设计模式,两种举例说明

代理设计模式 1.介绍 Spring 框架中AOP底层使用动态代理设计模式。通过学习动态代理设计模式可以很好的理解Spring框架AOP底层 代理模式&#xff08;Proxy&#xff09;是GoF23种设计模式之一。所谓代理模式是指客户端并不直接调用实际的对象&#xff0c;而是通过调用代理&am…

基于ssm家庭理财系统源码和论文

基于ssm家庭理财系统源码和论文743 idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 环境&#xff1a; jdk8 tomcat8.5 开发技术 ssm 摘要 随着Internet的发展&#xff0c;人们的日常生活已经离不开网络。未来人们的生活与工作将变得越来越数字化&#xff…

【文件上传系列】No.0 利用 FormData 实现文件上传、监控网路速度和上传进度(原生前端,Koa 后端)

利用 FormData 实现文件上传 基础功能&#xff1a;上传文件 演示如下&#xff1a; 概括流程&#xff1a; 前端&#xff1a;把文件数据获取并 append 到 FormData 对象中后端&#xff1a;通过 ctx.request.files 对象拿到二进制数据&#xff0c;获得 node 暂存的文件路径 前端…

PDF编辑器免费版有哪些?哪个好用?

日常工作和学习中,普通的PDF的阅读器通常无法进行编辑,更别说逆向导出成为Word、PPT或者Excel了。而且。市场上很多PDF编辑器还要收费。那么问题来了,PDF编辑器免费版有哪些呢?这就给大家安利几款,强烈建议收藏! PDF编辑器免费版一:PDF24 这款编辑器的功能有主要有PDF的合并、…

基于jQuery的web弹层插件

演示 源代码 Function.prototype.binding function() {if (arguments.length < 2 && typeof arguments[0] "undefined") return this;var __method this, args jQuery.makeArray(arguments), object args.shift();return function() {return __meth…

LiDAR 城市模型的 3D Python 工作流

1.引言 LiDAR&#xff08;Light Detection and Ranging&#xff09;是一种通过测量激光束从发射到返回的时间来测量距离&#xff0c;从而生成物体的三维表面模型的技术。这种技术在城市建模中具有广泛的应用&#xff0c;可以用于城市规划、环境监测、交通仿真等领域。而使用Pyt…

Linux查看命令的绝对路径

linux查看命令的绝对路径 在Linux中&#xff0c;可以使用以下命令来查看命令的绝对路径&#xff1a; 1、which 命令名 例如&#xff0c;要查看chronyc命令的绝对路径&#xff0c;可以运行&#xff1a; which chronyc 2、whereis 命令名 例如&#xff0c;要查看chronyc命令…