当前位置: 首页 > news >正文

进程编程及其函数的使用

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;
}

笔记详解 

http://www.lryc.cn/news/423225.html

相关文章:

  • 为什么funnel图在邮件中不显示
  • C语言 ——— 写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串
  • 白骑士的Matlab教学实战项目篇 4.4 机器学习与AI
  • 事件监控模块——Channel模块
  • OCR调研
  • 数据结构(学习版)
  • 除了知云文献翻译外,这几款翻译工具值得推荐!
  • Element UI动态实现面包屑导航~
  • 安科瑞Acrel-2000ES储能能量管理系统在新型电力系统下分布式储能的研究
  • Git 逆转时光:版本回退操作详解
  • 8.6.数据库基础技术-数据库的控制
  • php语言基础入门
  • 告别杂音,从 AI 音频降噪开始
  • Postman中params传参与Body传参区别以及Body中不同类型的区别
  • 数据结构入门——05队列
  • 使用python MySQL 实现一个 key-value(string:json) 读写库
  • 实现:uniapp项目分享视频页面到微信,可以自定义分享的页面样式及内容
  • 【C++】—— 类与对象(五)
  • scp命令的使用
  • 定位和解决线上接口性能优化或者数据库性能优化的思路是什么?
  • 修改docker的/var/lib/docker/overlay2储存路径
  • 解决中国式报表难题,这款工具真的免费且好用
  • 图解Kafka | 彻底弄明白 Kafka 两个最重要的配置
  • 创建线程的三种方式
  • 官宣|Apache Flink 1.20 发布公告
  • HarmonyOS应用一之登录页面案例
  • KubeSphere 部署 Kafka 集群实战指南
  • 手把手教你安装音乐制作软件FL Studio 24.1.1.4285中文破解版
  • SDL 与 OpenGL 的关系
  • 考研数学 线性代数----行列式与矩阵