写时拷贝+进程终止

news2024/11/16 19:44:24

目录

一、写时拷贝

二、创建多进程

三、进程终止

(一)main函数的返回值

1. main函数的返回值

2. 退出码

3. 查看进程的退出码

(二)错误码VS退出码

(三)代码异常终止

1. 基本概念

2. 信号

(四)进程常见退出方法

1. exit函数

2. _exit函数

3. exit和_exit的区别


一、写时拷贝

  • 通常,父子代码共享,父子再不写入时,数据也是共享的,当任意一方试图写入,便以写时拷贝的方式各自一份副本。

二、创建多进程

父进程创建了5个子进程,每个子进程都会执行 Worker() 函数 

#include<stdio.h>    
#include<unistd.h>    
#include<sys/types.h>    
#include<stdlib.h>//exit的头文件    
#define N 5    
void Worker()    
{    
    int cnt = 10;    
    while(cnt)    
    {    
        printf("I am a child process, pid: %d, ppid: %d, cnt: %d\n",getpid(),getppid(),cnt);    
        sleep(1);    
        cnt--;    
    }    
}    
int main()    
{    
    int i;    
    for(i=0;i<N;i++)    
    {    
        sleep(1);    
        pid_t id =fork();    
        if(id == 0)//子进程    
        {    
            Worker();    
            exit(0);    
        }    
    
    }    
    sleep(100);    
    return 0;    
}  

三、进程终止

(一)main函数的返回值

1. main函数的返回值

  • main函数的返回值也称进程的退出码
  • 在多进程环境中,创建子进程的目的是“帮我办事”,怎么得知子进程将事办的怎么样,获取子进程的退出码

2. 退出码

  • 进程因为什么原因失败的,1,2,3..,不同的数字表示不同的原因,但是纯数字不方便人阅读,所以需要将退出码转换成退出码字符串描述
  • errno 是一个全局变量,它在C标准库中被定义为一个 int 类型,用于记录发生在程序中的错误信息
  • strerror 是一个C标准库中的函数,用于将一个错误码(通常是由系统调用返回的errno)转换为相应的错误信息字符串

测试2: 

  #include<stdio.h>                    
  #include<string.h>//strerror的头文件
  #include<errno.h>
  int main()
  {
      printf("before: %d\n",errno);
      FILE* fp = fopen("./log.txt","r");
      printf("after: %d, error string: %s\n",errno,strerror(errno));
      return 0;
  }

 

3. 查看进程的退出码

  • ?:保存最近一个子进程执行完毕时的退出码
echo $?

(二)错误码VS退出码

  • 错误码通常是衡量一个库函数或者是一个系统调用一个函数的调用情况
  • 退出码通常是一个进程退出的时候,他的退出结果
  • 两者都是,当失败的时候,用来衡量函数,进程出错是出错详细原因

(三)代码异常终止

1. 基本概念

  • 进程出异常,本质是进程收到了对应的信号,自己终止了。
  • 一个进程是否出异常,我们只要看有没有收到信号即可(保存信号的位置如果是0,表示没收到信号;非0,表示收到了信号)

2. 信号

  •  代码中出现异常,操作系统会将异常转化成信号,操作系统给进程发送信号将进程终止
kill -l //列出信号

  #include<stdio.h>    
  int main()                                                                                                                  
  {    
      int a = 10;    
      a /=0;    
      return 0;    
  } 

 

(四)进程常见退出方法

1. exit函数

#include <unistd.h>
void exit(int status);

2. _exit函数

#include <unistd.h>
void _exit(int status);
参数:status 定义了进程的终止状态,父进程通过wait来获取该值

3. exit和_exit的区别

  • exit是库函数,_exit是系统调用
  • exit终止进程的时候,自动刷新缓冲区。_exit终止进程的时候,不会自动刷新缓冲区

 

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

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

相关文章

Visual Studio 2022打不开net4.5项目的解决方案

1 问题 是因为你本机没有装相关的netframework的包&#xff0c;具体文件夹的路径在&#xff1a; C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework 如下图&#xff1a; 进入目录看&#xff0c;我的net4.5.2是空的&#xff0c;如下图&#xf…

jsp 网上订餐Myeclipse开发mysql数据库web结构java编程计算机网页项目

选题目的 本设计课题为网上订餐系统设计与实现&#xff0c;提供无纸化点餐、支付&#xff0c;实现点餐快捷&#xff0c;方便管理。餐厅电子化是目前的潮流和趋势&#xff0c;大多数企业都将公司内部运营流程电子化。网上订餐管理系统应运而生&#xff0c;能够有效提高公司的管…

【干货】<img/>加载成功||失败

功能描述 img标签绑定URL时&#xff0c;图片加载会出现如下情况&#xff1a; 加载成功展示url加载失败显示默认图片&#xff08;require(/assets/images/imgError.png)&#xff09; dom代码 <img :src"url" alt"" error"errorImageShow($even…

第57篇-某钩招聘网站加密参数分析【2023-10-31】

声明:该专栏涉及的所有案例均为学习使用,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!如有侵权,请私信联系本人删帖! 文章目录 一、前言二、网站分析1.X-S-HEADER参数2.请求参数data3.响应机密值data一、前言 网址: aHR0cHM6Ly93d3cubGFnb3UuY29t…

优化 FPGA HLS 设计

优化 FPGA HLS 设计 用工具用 C 生成 RTL 的代码基本不可读。以下是如何在不更改任何 RTL 的情况下提高设计性能。 介绍 高级设计能够以简洁的方式捕获设计&#xff0c;从而减少错误并更容易调试。然而&#xff0c;经常出现的问题是性能权衡。在高度复杂的 FPGA 设计中实现高性…

【element-ui】表格

效果展示 组件代码 <el-table class"compTableClass" ref"tableOOOOO":class"(className in tableConfig)?tableConfig.className:":data"tableConfig.data" :height"tableConfig.height" style"width: 100%"…

【ES专题】ElasticSearch 高级查询语法Query DSL实战

目录 前言阅读对象阅读导航前置知识数据准备笔记正文一、ES高级查询Query DSL1.1 基本介绍1.2 简单查询之——match-all&#xff08;匹配所有&#xff09;1.2.1 返回源数据_source1.2.2 返回指定条数size1.2.3 分页查询from&size1.2.4 指定字段排序sort 1.3 简单查询之——…

CUMT-----Java课后第三章编程作业

文章目录 一、题11.1 题目描述1.2 代码块1.3 运行截图 二、题22.1 题目描述2.2 代码块2.3 运行截图 一、题1 1.1 题目描述 1.2 代码块 public class Book {private String name;private int pages;public String getname(){return name;}public void setname(String name){th…

HarmonyOS(二)—— 初识ArkTS开发语言(上)之TypeScript入门

前言 Mozilla创造了JS&#xff0c;Microsoft创建了TS&#xff0c;而Huawei进一步推出了ArkTS。因此在学习使用ArkTS前&#xff0c;需要掌握基本的TS开发技能。 ArkTS介绍 ArkTS是HarmonyOS优选的主力应用开发语言。它在TypeScript&#xff08;简称TS&#xff09;的基础上&am…

网络安全安全领域最容易搞混的四个名词:Network网络安全、Cyber网络安全、数据安全、信息安全

在安全领域我们经常会遇到Network网络安全、Cyber网络安全、数据安全、信息安全&#xff0c;它们看起来都差不多&#xff0c;那么它们之间有什么区别呢&#xff1f; 如果你对网络安全入门感兴趣&#xff0c;那么你需要的话可以点击这里&#x1f449;【入门&进阶全套282G学…

基于PyTorch的共享单车使用数量预测研究

收藏和点赞&#xff0c;您的关注是我创作的动力 文章目录 概要 一、预测模型的实现3.1数据的获取和预处理3.2划分数据集3.3构建神经网络 二、PyTorch框架三 原理2.1前馈神经网络2.1.1 BP神经网络 四 预测效果验证4.1小批量梯度下降4.2批量梯度下降4.3随机梯度下降 五 结 论目录…

javascript的webstorage数据存储问题,不能直接存undefined

这篇文章分享一下自己使用sessionStorage遇到的一个小问题&#xff0c;以后遇到要避坑。 需求是easyui表格的单元格编辑&#xff0c;点击保存的时候会结束当前行的编辑&#xff0c;然后修改editingId&#xff08;当前编辑行记录的ID&#xff09;。 目录 一、待解决问题 二、完…

CN考研真题知识点二轮归纳(3)

持续更新&#xff0c;上期目录&#xff1a; CN考研真题知识点二轮归纳&#xff08;2&#xff09;https://blog.csdn.net/jsl123x/article/details/134111760?spm1001.2014.3001.5501 1.TCP/IP 名称&#xff1a;传输控制协议/网络协议&#xff0c;是一个协议族&#xff0c;主…

机器人仿真——gazebo学习笔记(0)

Gazebo是一个功能强大的三维物理仿真平台&#xff0c;具有强大的物理引擎、高质量的图形渲染能力、重点是他是开源的、免费的。 1.Gazebo具备以下几个特点: 1.动力学仿真:支持多种高性能物理引擎,像ODE、Bullet等. 2.三维可视化环境:x、y、z三维环境。 3.传感器仿真:支持传…

【MATLAB】全网唯一的13种信号分解+FFT傅里叶频谱变换联合算法全家桶

有意向获取代码&#xff0c;请转文末观看代码获取方式~ 大家吃一顿火锅的价格便可以拥有13种信号分解FFT傅里叶频谱变换联合算法&#xff0c;绝对不亏&#xff0c;知识付费是现今时代的趋势&#xff0c;而且都是我精心制作的教程&#xff0c;有问题可随时反馈~也可单独获取某一…

数据仓库-拉链表

在数据仓库中制作拉链表&#xff0c;可以按照以下步骤进行&#xff1a; 确定需求&#xff1a;首先明确需要使用拉链表的场景和需求。例如&#xff0c;可能需要记录历史数据的变化&#xff0c;以便进行时间序列分析等。设计表结构&#xff1a;在数据仓库中&#xff0c;拉链表通…

uniapp 使用 UDP

一、搭建UDP服务端&#xff0c;nodejs const dgram require("dgram");const message Buffer.from("你好&#xff0c;这是一个UDP广播消息"); const port 3000; // 用你想要的端口替换这里// 创建一个UDP套接字 const socket dgram.createSocket("…

《TCP/IP详解 卷一:协议》第5章的IPv4数据报的IHL字段解释

首先说明一下&#xff0c;这里并不解释整个IPv4数据报各个字段的含义&#xff0c;仅仅针对IHL字段作解释。 我们先看下IPv4数据报格式 对于IHL字段&#xff0c; 《TCP/IP详解 卷一&#xff1a;协议》这么解释&#xff1a; IPv4数据报。头部大小可变&#xff0c;4位的IHL字段…

队列的链式存储结构与实现

前言 在前面我们学习了队列的概念与循环队列&#xff0c;我们知道了循环链表的队列长度事先就得确定好&#xff0c;但是实际中队列长度我们事先大多不知道&#xff0c;所以还是得研究一下动态的队列长度的队列储存与实现。 虽然顺序存储也可以通过realloc来实现扩容&#xff0c…

使用Postman快速复现浏览器的请求(包括生成调用代码)

前言 大家好&#xff01;我是sum墨&#xff0c;一个一线的底层码农&#xff0c;平时喜欢研究和思考一些技术相关的问题并整理成文&#xff0c;限于本人水平&#xff0c;如果文章和代码有表述不当之处&#xff0c;还请不吝赐教。 好久没有写开发类的工具使用文了&#xff0c;这…