进程编程及其函数的使用
1. 创建进程
创建进程的核心操作是使用 fork() 系统调用。
1.1 fork() 系统调用
fork() 创建一个新进程(子进程),新进程几乎是父进程的完整拷贝。fork() 返回两次:
- 在父进程中,返回子进程的 PID。
- 在子进程中,返回 0。
#include <stdio.h>
#include <unistd.h>int main() {pid_t pid = fork(); // 创建一个新进程if (pid == -1) {// 错误处理:fork 失败perror("fork failed");return 1;} else if (pid == 0) {// 子进程代码printf("This is the child process. PID: %d\n", getpid());} else {// 父进程代码printf("This is the parent process. PID: %d, Child PID: %d\n", getpid(), pid);}return 0;
}
2. 进程终止
进程可以通过以下方式终止:
- 正常退出:调用
exit()。 - 异常退出:调用
abort()。
2.1 正常退出
exit() 函数用于正常终止进程并返回一个状态码给操作系统。状态码通常用来表示进程的退出状态。
#include <stdio.h>
#include <stdlib.h>int main() {printf("Process is exiting normally.\n");exit(0); // 正常退出,状态码为 0
}
2.2 异常退出
abort() 函数用于非正常退出进程,通常是由于程序错误。abort() 终止进程并产生核心转储(如果系统配置为生成核心转储)。
#include <stdio.h>
#include <stdlib.h>int main() {printf("Process is aborting.\n");abort(); // 异常退出
}
3. 进程结束后的处理
进程终止后,父进程可以使用 wait() 或 waitpid() 系统调用来回收子进程的资源,并获取子进程的退出状态。
3.1 wait() 系统调用
wait() 阻塞调用,直到子进程终止。它返回子进程的 PID,并将子进程的退出状态存储在一个整数中。
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>int main() {pid_t pid = fork();if (pid == -1) {perror("fork failed");return 1;} else if (pid == 0) {// 子进程代码printf("Child process is exiting.\n");exit(42); // 子进程退出,状态码为 42} else {// 父进程代码int status;pid_t terminated_pid = wait(&status); // 等待子进程终止if (WIFEXITED(status)) {printf("Child process %d exited with status %d.\n", terminated_pid, WEXITSTATUS(status));} else {printf("Child process %d did not exit normally.\n", terminated_pid);}}return 0;
}
笔记详解
相关文章:
进程编程及其函数的使用
1. 创建进程 创建进程的核心操作是使用 fork() 系统调用。 1.1 fork() 系统调用 fork() 创建一个新进程(子进程),新进程几乎是父进程的完整拷贝。fork() 返回两次: 在父进程中,返回子进程的 PID。在子进程中&#…...
为什么funnel图在邮件中不显示
在电子邮件中嵌入的Funnel图或其他图表可能不显示的原因有以下几种: 1. 邮件客户端对外部内容的限制 大多数邮件客户端为了安全,会阻止从外部服务器加载的内容,如图片、脚本或嵌入式图表。Funnel图通常是通过链接或外部脚本生成的ÿ…...
C语言 ——— 写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串
目录 题目要求 代码思路 代码实现 题目要求 写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串 例如 s1 "AABCD" ;s2 "BCDAA" ,返回1 s1 "AABcd" ;s2 "BCDAA" …...
白骑士的Matlab教学实战项目篇 4.4 机器学习与AI
系列目录 上一篇:白骑士的Matlab教学实战项目篇 4.3 控制系统设计 机器学习与人工智能(AI)是当前技术发展的前沿领域,通过数据驱动的模型和算法,可以解决许多复杂的问题。MATLAB 提供了丰富的工具和函数,支…...
事件监控模块——Channel模块
这个模块就是 记录文件描述符 和 想要监控的事件,实际就绪的事件,以及事件发生之后要怎么做,判断有没有监控这个事件,获取事件。 class Poller; class EventLoop; class Channel {private:int _fd;EventLoop *_loop;uint32_t _ev…...
OCR调研
OCR调研 一、介绍 OCR(Optical Character Recognition,光学字符识别)是一种将图像中的文字转换为计算机可处理格式的技术。OCR技术经历了从传统OCR到基于深度学习的OCR的转变。深度学习OCR技术通过模拟人脑神经元结构处理文本和图像数据&am…...
数据结构(学习版)
考纲 (一)数据结构部分; 线性表栈、队列、数组查找和内部排序树和图 (二)计算机算法设计部分: 递归与分省策路、回溯法贪心算法、分支限界法、动态规划算法设计中的数据结构运用 (三)程序设计基础(C或C)部分: 基本数据类型、各种运算符和表达式、基本控制结构。数组的定义…...
除了知云文献翻译外,这几款翻译工具值得推荐!
近年来,市面上涌现出众多优秀的文献翻译工具,其中知云文献翻译凭借其强大的功能受到了广泛好评。然而,除了知云文献翻译外,还有几款翻译工具同样值得推荐。今天,就让我们一起来了解一下! Foxit在线翻译 链…...
Element UI动态实现面包屑导航~
思路:监听路由变化,在路由规则中添加meta然后在组件中渲染。 import Vue from "vue" import VueRouter from "vue-router" Vue.use(VueRouter) // 解决ElementUI导航栏中的vue-router在3.0版本以上重复点菜单报错问题 const origin…...
安科瑞Acrel-2000ES储能能量管理系统在新型电力系统下分布式储能的研究
摘要:传统电力系统的结构和运行模式在以新能源为主体的新型电力系统中发生了巨大的变化,分布式储能作为电力系统中重要的能量调节器,也迎来了新的发展机遇。立足于储能技术发展现状,分析了分布式储能技术特点及在清洁可再生能源方…...
Git 逆转时光:版本回退操作详解
git 版本回退操作详解 一、Git的工作流程二、git clean尚未 commit 的修改三、已经 commit 尚未 push 到 remote 仓库四、已经提交到 remote 仓库五、回退建议六、总结 一、Git的工作流程 在讲这个版本回退之前,我们要温习一下Git的原理。下面这张图就是 Git 的整个…...
8.6.数据库基础技术-数据库的控制
并非控制 事务:由一系列DML操作组成,这些操作,要么全做,要么全不做,它从第一个DML操作开始,rollback、commit或者DDL结束,拥有以下四种特性,详解如下: (操作)…...
php语言基础入门
文章目录 php语言基础入门一、简介二、基础语法1、变量2、常量3、注释4、基础数据类型4.1、整形数据类型4.2、布尔数据类型4.3、字符串数据类型4.4、浮点型数据类型4.5、PHP数据类型之查看和判断数据类型 5、流程控制5.1、if-elseif-else语句使用5.2、switch语句使用5.3、while…...
告别杂音,从 AI 音频降噪开始
生活中,音频无处不在。无论是聆听动人的音乐,还是参与重要的电话会议,又或是沉浸于精彩的网课学习,清晰、纯净的音频质量都至关重要。然而,音频中的噪声却像不速之客,扰乱着这份美好。 音频中的噪声形式多样…...
Postman中params传参与Body传参区别以及Body中不同类型的区别
Postman中params传参与Body传参区别 在HTTP请求中,参数可以通过不同的方式传递给服务器,其中最常见的两种方式是使用params(查询参数)和body(请求体)。以下是它们的主要区别: 1. 位置…...
数据结构入门——05队列
1.队列 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先 进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾出队列:进行删除操作的一端称为队头 队列也可以数…...
使用python MySQL 实现一个 key-value(string:json) 读写库
在Python中,我们可以使用`pymysql`库(如果MySQL服务器版本较高,也推荐使用`mysql-connector-python`)来建立一个简单的key-value存储库,其中键是字符串,值是JSON格式的数据。这里我们创建一个基本的类来完成读写操作: import pymysql.cursors import jsonclass JsonKVS…...
实现:uniapp项目分享视频页面到微信,可以自定义分享的页面样式及内容
背景:最近在逐步完善一个uniapp项目的视频功能, 包括有视频录制及发布,在完善过程中想要实现分享 视频到微信的功能,也就是相当于分享链接到微信, 微信打开后可以获取到视频并可以观看,有了想法便 准备实行…...
【C++】—— 类与对象(五)
【C】—— 类与对象(五) 1、类型转换1.1、类型转换介绍1.2、类型转换的应用1.3、explicit 关键字 2、static 静态成员2.1、static 静态成员变量2.2、static 静态成员函数2.3、总结 3、友元3.1、友元函数3.2、友元类 4.内部类5、匿名对象6、对象拷贝时的编…...
scp命令的使用
在Windows和Linux之间传文件,最简单的是共享目录,如果不能使用共享目录,可以使用scp命令, 一般Windows和Linux都支持。 scp命令是secure copy的缩写,用于在Linux下进行远程文件拷贝,windows一般也有该命令…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...
Python训练营-Day26-函数专题1:函数定义与参数
题目1:计算圆的面积 任务: 编写一个名为 calculate_circle_area 的函数,该函数接收圆的半径 radius 作为参数,并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求:函数接收一个位置参数 radi…...


