【linux】进程创建与进程终止

让我们对这段关于linux进程创建和终止的文章进行伪原创处理,同时保持原意不变,并保留图片的原始位置和格式:

进程创建语言:JavaScript运行次数:0运行复制

#include pid_t fork(void);

返回值:子进程返回0,父进程返回子进程ID,错误时返回-1

当进程调用fork函数时,控制权会转移到内核中的fork代码。内核会执行以下操作:

为子进程分配新的内存块和内核数据结构将父进程的部分数据结构内容复制到子进程将子进程添加到系统进程列表中fork返回后,开始调度器的调度

【linux】进程创建与进程终止 写时拷贝

【linux】进程创建与进程终止02. 进程终止首先需要明确,终止的目的是什么:

释放曾经占用的代码和数据空间释放内核数据结构

进程退出场景:

代码运行完毕,结果正确代码运行完毕,结果不正确(可以通过进程退出码判断这两种情况)代码异常终止

【linux】进程创建与进程终止 上面的代码中,进程11258是父进程bash,执行echo $?命令,父进程bash可以获取最近一个子进程的退出码。我们之前提到,echo是一个内建命令,打印的是bash内部的变量数据。

【linux】进程创建与进程终止父进程bash为什么需要获取子进程的退出码呢?这是为了了解子进程的退出情况(成功,失败,以及失败的原因)。

进程结束时,可以通过return语句(在函数中)或exit()函数(直接从程序中)指定一个退出码。这个退出码是一个整数,传递给父进程,用于表示子进程的终止状态。

常见的惯例:

0(EXIT_SUCCESS):通常表示成功。程序执行完成且没有错误。非0(EXIT_FAILURE):通常表示有错误发生。具体的非零值可以用来指示不同类型的错误。

异常终止在操作系统中,进程的异常终止通常是由于一些错误或意外情况导致程序无法正常运行到结束。以下是一些典型的异常终止情况:

程序错误段错误(Segmentation Fault):程序试图访问其内存空间以外的区域或非法的内存区域。常见于指针错误,如访问未初始化的指针、空指针或已释放的内存。除零错误:程序尝试进行除以零的运算,这在数学运算中是未定义的。资源问题内存耗尽:程序请求更多内存时,如果系统无法分配(如堆内存耗尽),可能会导致程序异常终止。文件描述符耗尽:程序打开太多文件而没有关闭,达到系统限制,可能导致系统函数失败,影响程序继续运行。信号致命信号:SIGSEGV(段错误信号):最常见的程序崩溃原因,通常是由于访问违法的内存地址。SIGABRT(中止信号):通常是由于程序内部发生严重错误或调用 abort() 函数而触发。SIGFPE(浮点异常信号):执行了一个无效的算术运算,比如除以零。SIGKILL:无条件终止程序运行的信号,无法捕获或忽略。SIGTERM:请求终止程序的信号,比 SIGKILL 更温和,允许程序进行清理(关闭文件、释放资源等)操作后退出。非致命信号(如 SIGINT、SIGHUP 等),如果没有被程序正确处理,也可能导致程序终止。操作系统干预死锁检测:操作系统可能终止处于死锁状态的进程以解锁系统资源。资源超额:操作系统对程序使用的资源(如 CPU 时间、内存使用量)有限制,如果程序超出这些限制,如超过了设定的 CPU 时间,操作系统可能终止这个进程。运行时异常未捕获的异常:在一些高级语言中(如 Java、Python),如果程序中发生了异常而没有被捕获和处理,这通常会导致程序异常终止。例如,Python 中未被捕获的 ValueErrorIndexError

一旦出现异常,退出码就没有意义了!进程出异常,本质是因为进程收到了操作系统发给进程的信号!

【linux】进程创建与进程终止【linux】进程创建与进程终止 段错误,操作系统提前终止进程

我们可以通过查看进程退出的信号来判断进程为什么会异常!

【linux】进程创建与进程终止首先要确认是否是异常,不是异常的情况下,进程一定是运行完毕了,这时只需查看退出码即可。衡量一个进程的退出情况,我们只需要两个数字:退出码和退出信号!

豆包AI编程 豆包AI编程

豆包推出的AI编程助手

豆包AI编程 483 查看详情 豆包AI编程

【linux】进程创建与进程终止如何终止进程?正常退出:

main函数return,表示进程终止(非main函数的return,仅表示函数结束)代码任意位置调用exit函数,注意:exit函数会导致进程立即退出_exit(),系统调用

异常退出:

通过Ctrl + C触发信号终止

在Unix和类Unix系统中,_exit()exit()都用于终止进程,但它们在功能和使用场景上有重要的区别。理解这些区别有助于正确地管理程序的终止过程,特别是在涉及资源清理和子进程管理时。

exit()函数由C标准库提供,用于结束程序。它执行几个重要的清理操作,然后调用底层的_exit()exit_group()系统调用来终止进程。

特点和操作:

刷新缓冲区:exit()会自动刷新所有stdio的缓冲区,将缓冲区内的数据写入文件。这确保了所有挂起的输出(例如,使用printf()产生的输出)都被正确地写出。

【linux】进程创建与进程终止【linux】进程创建与进程终止

执行atexit()注册的函数:如果程序中使用了atexit()注册了任何终止时执行的函数,exit()会在实际终止进程前按注册的逆序调用这些函数。这可以用于执行一些如关闭文件描述符、释放分配的内存等清理工作。关闭stdio库:关闭所有使用标准I/O库打开的文件等资源。

使用场景主要是普通的应用程序,在需要确保输出数据完整性和执行特定的清理操作时使用。

_exit()函数由POSIX标准指定,直接调用系统级别的退出操作,用于立即结束程序,不执行标准I/O的清理操作和不调用atexit()或者C++的全局对象的析构函数。

特点和操作:

不刷新缓冲区:不处理stdio的缓冲区,如果缓冲区内有未写入的数据,这些数据将丢失。

【linux】进程创建与进程终止【linux】进程创建与进程终止

不执行atexit()注册的函数:任何通过atexit()注册的函数都不会被执行。立即终止:提供一种确保程序能迅速终止的方式,通常用于子进程退出或者在错误处理中需要立即终止程序时使用。

使用场景主要是在创建子进程后,子进程完成任务立即退出时,或者在程序遇到无法恢复的错误需要立即终止时使用。

使用exit()当你需要正常终止程序,并且需要清理资源(如关闭文件、保存状态等)。使用_exit()在需要快速退出且不关心资源清理的场景下,比如在子进程中执行了某个任务后,或者在出现严重错误时安全退出。

选择合适的函数可以避免数据丢失和资源泄漏,确保程序的稳定和安全。

return是一种更常见的退出进程方法。执行return n等同于执行exit(n),因为调用main的运行时函数会将main的返回值当做exit的参数。

以上就是【linux】进程创建与进程终止的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/487165.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
js中typeof怎么用
上一篇 2025年11月8日 13:53:10
快速构建自己的APP平台步骤详解
下一篇 2025年11月8日 13:53:18

相关推荐

  • 生成Java中全范围正Double随机数的正确方法

    本文旨在指导开发者如何在Java中生成覆盖整个正Double范围的随机数,并解释了使用ThreadLocalRandom.nextDouble(Double.MIN_VALUE, Double.MAX_VALUE)可能产生偏差的原因。我们将提供一种基于位操作的替代方案,确保生成的随机数在Double…

    2026年9月24日
    100
  • VSCode如何配置.NET开发环境 VSCode搭建.NET项目的完整流程

    首先安装.net sdk并验证版本;2. 安装vscode及microsoft官方c#扩展,确保智能感知和调试功能正常;3. 通过dotnet new命令创建项目,并使用code .在vscode中打开项目;4. 添加构建和调试资产以生成tasks.json和launch.json文件;5. 安装n…

    2026年9月24日
    000
  • PixVerse V5入围Artificial Analysis第一梯队,上线首日全球超百万用户更新并体验

    PixVerse V5入围Artificial Analysis第一梯队,上线首日全球超百万用户更新并体验PixVerse V5入围Artificial Analysis第一梯队,上线首日全球超百万用户更新并体验PixVerse V5入围Artificial Analysis第一梯队,上线首日全球超百万用户更新并体验PixVerse V5入围Artificial Analysis第一梯队,上线首日全球超百万用户更新并体验

    8月27日晚,根据权威独立测评平台 artificial analysis 最新测试结果,爱诗科技发布的pixverse v5 新一代自研视频生成大模型,在图生视频(image to video)项目中排名全球 top2,在文生视频(text to video)项目中位列 top3,保持在全球第一梯…

    2026年9月24日 用户投稿
    100
  • hive安装配置实验

    一、安装前的准备工作 1. 配置并安装hadoop,请参考链接http://blog.csdn.net/wzy0623/article/details/50681554。 2. 下载以下安装包:mysql-5.7.10-linux-glibc2.5-x86_64.tar.gz、apache-hive…

    2026年9月24日
    600
  • 大学论文怎么写?让AI工具助你一臂之力

    大学论文怎么写?让AI工具助你一臂之力大学论文怎么写?让AI工具助你一臂之力大学论文怎么写?让AI工具助你一臂之力大学论文怎么写?让AI工具助你一臂之力

    如果要选出大学学习过程中最令人头疼的事,写论文无疑能稳居榜首。从选题开题、内容撰写,到翻译润色、查重降重,每个步骤都耗时耗力,让人焦头烂额。然而,随着 ai 技术的发展,如今写论文这件事,已经可以借助智能工具变得更高效、更轻松。 开题太难?AI 来帮你破局! 论文的第一道难关就是开题。面对浩如烟海的…

    2026年9月24日 用户投稿
    100
  • 苹果15换屏幕费用是多少

    官方维修费用:品质与保障的代价 苹果官方售后以其高标准的服务和原装零部件著称。针对iPhone 15的屏幕更换,官方定价普遍处于1000元至2000元区间,具体费用会因机型差异(如标准版与Pro版)以及所在城市而有所不同。这一价格不仅体现了苹果品牌的技术投入与服务保障,也确保了维修后的设备性能与出厂…

    2026年9月24日
    200
  • VSCode 怎样配置终端默认路径 VSCode 终端默认路径的配置技巧​

    在 vscode 中配置终端默认启动路径需修改 terminal.integrated.cwd 设置项;2. 可通过用户设置(全局生效)或工作区设置(项目专属)进行配置,优先级为工作区设置覆盖用户设置;3. 路径可使用绝对路径或相对路径(推荐相对路径以提升协作性),windows 系统需注意反斜杠转…

    2026年9月24日
    000
  • 使用 PHP 解析 JSON 文件并在网页上显示特定数据

    本文旨在帮助开发者学习如何使用 PHP 解析 JSON 文件,并提取其中的特定数据,将其以结构化的方式展示在网页上。我们将通过一个简单的示例,演示如何读取 JSON 数据,解析成 PHP 数组,并最终以 HTML 表格的形式呈现。 PHP 解析 JSON 数据 JSON (JavaScript Ob…

    2026年9月24日
    100
  • OriginOS 6 深度体验:当操作系统回归「体验为王」

    OriginOS 6 深度体验:当操作系统回归「体验为王」OriginOS 6 深度体验:当操作系统回归「体验为王」OriginOS 6 深度体验:当操作系统回归「体验为王」OriginOS 6 深度体验:当操作系统回归「体验为王」

    2020 年,智能手机刚刚进入 5g 普及阶段,手机的硬件与软件都迎来了一次迭代浪潮——新形态的需求对操作系统的设计与交互都提出了诸多新的问题,originos 的首个版本,可以看作 vivo对这些问题的回答。 彼时,我曾有机会与 OriginOS 开发团队沟通,正如 OriginOS 的中文名原 …

    2026年9月24日 用户投稿
    100
  • 《Python完全自学教程》免费在线连载1.5

    《Python完全自学教程》免费在线连载1.5《Python完全自学教程》免费在线连载1.5《Python完全自学教程》免费在线连载1.5《Python完全自学教程》免费在线连载1.5

    说明: 本节内容,是针对非计算机专业的读者提供的补充知识。 1.5 操作系统 本节不是全面介绍操作系统知识,是提醒读者从开发者的角度认识自己的操作系统——根据多年的经验,至少要能熟练使用一些命令完成常见操作。 首先要声明硬件设备,本书所演示的代码都是基于个人计算机( Personal Compute…

    2026年9月24日 用户投稿
    700
  • 探索VSCode Jupyter Notebook集成与扩展

    VSCode集成Jupyter Notebook提升开发效率,安装Jupyter扩展后可直接运行.ipynb文件,支持内核选择、Shift+Enter执行单元格、图表渲染及变量状态保留;结合Python扩展、Pylance、GitLens等工具,实现调试、智能提示、版本控制与代码转换,适合数据分析与…

    2026年9月24日
    000
  • Linux用户adduser与useradd命令区别

    adduser是交互式脚本,默认创建家目录并设密码,适用于Debian/Ubuntu;2. useradd是底层命令,需手动加参数创建家目录和Shell,通用性强,适合脚本使用。 在Linux系统中,adduser 和 useradd 都可以用来创建新用户,但它们在实现方式、使用习惯和功能上存在明显…

    2026年9月24日
    000
  • 如何在PHP的require语句中传递参数并有效管理变量作用域

    本文探讨了在php中使用`require`或`include`语句时如何向被引入文件传递参数。文章详细阐述了通过直接变量作用域共享、利用`$_get`超全局变量(不推荐)以及将引入文件内容封装为函数或类(推荐最佳实践)这三种方法,并提供了相应的代码示例,旨在帮助开发者理解和选择最适合其场景的参数传递…

    2026年9月24日
    000
  • 迅雷浏览器怎么开启深色模式_迅雷浏览器夜间模式设置

    开启迅雷浏览器深色模式可减少夜间用眼疲劳,具体方法包括:一、通过浏览器菜单进入设置,选择外观中的深色或夜间主题,或开启“跟随系统”选项实现自动切换;二、在操作系统中启用深色模式(Windows路径为“设置>个性化>颜色”,macOS为“系统设置>通用>外观”),并确保浏览器版本最新以兼容显示;三、若…

    2026年9月24日
    100
  • DeepArt的AI混合工具怎么操作?快速生成艺术风格图像的方法

    使用DeepArt类工具时,先选匹配的风格图与内容图,调节风格强度避免失真,推荐尝试Artbreeder、RunwayML、NightCafe等多元平台以提升创作效果。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ DeepArt的AI混合…

    2026年9月24日
    000
  • 如何解决MySQL安装时配置不生效的处理方法?

    如何解决MySQL安装时配置不生效的处理方法?如何解决MySQL安装时配置不生效的处理方法?如何解决MySQL安装时配置不生效的处理方法?如何解决MySQL安装时配置不生效的处理方法?

    配置mysql时遇到配置不生效的问题,常见原因包括配置文件路径错误、语法问题、命令行参数覆盖及数据目录权限或初始化问题。1. 配置文件路径是否正确?mysql只会读取特定路径的配置文件,建议使用命令mysql –help | grep “default options&#82…

    2026年9月24日 用户投稿
    000
  • Linux如何搜索文件内容 grep命令实战技巧

    Linux如何搜索文件内容 grep命令实战技巧Linux如何搜索文件内容 grep命令实战技巧Linux如何搜索文件内容 grep命令实战技巧Linux如何搜索文件内容 grep命令实战技巧

    grep是linux中搜索文件内容的常用命令,掌握技巧可大幅提升效率。1.基本语法为grep “内容” 文件名,支持通配符和 -i 忽略大小写;2.使用 -r 可递归搜索目录内容,配合 –include、–exclude-dir 和 -l 能精准定位文…

    2026年9月24日 用户投稿
    200
  • VSCode如何实现代码自动修复 VSCode智能重构与错误修正技巧

    VSCode如何实现代码自动修复 VSCode智能重构与错误修正技巧VSCode如何实现代码自动修复 VSCode智能重构与错误修正技巧VSCode如何实现代码自动修复 VSCode智能重构与错误修正技巧VSCode如何实现代码自动修复 VSCode智能重构与错误修正技巧

    vscode通过集成语言服务协议(lsp)、内置quick fixes和refactoring actions,并结合扩展如eslint、prettier等,实现代码自动修复与智能重构;2. 启用editor.formatonsave和editor.codeactionsonsave设置可在保存时自…

    2026年9月24日 用户投稿
    100
  • 如何用COUNT函数统计行数?处理NULL值时SUM/AVG函数的注意事项

    如何用COUNT函数统计行数?处理NULL值时SUM/AVG函数的注意事项如何用COUNT函数统计行数?处理NULL值时SUM/AVG函数的注意事项如何用COUNT函数统计行数?处理NULL值时SUM/AVG函数的注意事项如何用COUNT函数统计行数?处理NULL值时SUM/AVG函数的注意事项

    count函数统计行数时需注意使用方式,count(*)统计所有行包括null值,count(column_name)仅统计非null值。sum和avg函数均忽略null值,可能导致计算偏差,可通过coalesce或case语句处理。明确需求后选择合适方法,并注意数据类型与测试验证以避免错误。 CO…

    2026年9月24日 用户投稿
    000
  • Pages如何协作修改文档 Pages跟踪修改和建议的用法

    使用Pages的协作与修订功能可高效编辑文档,先启用共享邀请协作者,再通过建议模式提出修改,所有更改以标记形式显示,经审查后接受或拒绝,最终关闭修订模式保存定稿。 如果您正在与团队成员共同编辑一份文档,但希望保留原始内容并记录所有更改建议,可以使用 Pages 的协作与修订功能来实现高效沟通。通过这…

    2026年9月24日
    100

发表回复

登录后才能评论
关注微信