【Linux】进程控制(一)

news/2024/9/17 7:43:44/ 标签: linux

 

1. 进程创建

(一)认识fork函数

从已存在进程中创建一个新进程(新进程为子进程,而原进程为父进程)

进程调用fork,当控制转移到内核中的fork代码后,内核做:

  1. 分配新的内存块和内核数据结构给子进程
  2. 将父进程部分数据结构内容拷贝至子进程
  3. 添加子进程到系统进程列表当中
  4. fork返回,开始调度器调度

注意:

  1. 当一个进程调用fork之后,就有两个二进制代码相同的进程。进程是独立的,互不干扰对方运行
  2. fork之后,谁先执行完全由调度器决定

(二)fork函数返回值

  1. 子进程返回0
  2. 父进程返回子进程的 pid

(三)写实拷贝

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

(四)fork常规用法

  1. 一个父进程希望复制自己,使父子进程同时执行不同的代码段
  1. 一个进程要执行一个不同的程序(发生进程替换)

(五)fork调用失败的原因

  1. 系统中有太多的进程
  2. 实际用户的进程数超过了限制

2. 进程终止

(一)进程退出场景

  • 代码运行完毕,结果正确
  • 代码运行完毕,结果不正确
  • 代码异常终止

(二)进程常见退出方法

  1. 正常终止(可以通过 echo $? 查看进程退出码 $? : 表示最近一次的进程退出时候的得到的退出码
  • 从main返回

main函数的返回值,本质表示:进程进行完成时,是否得到正确的结果,如果不是,可以用不同的数字代表不同的出错原因

  • 调用exit

exit : 中止一个进程

注意:

  1. exit 在任意一个位置被调用,表示进程直接退出
  2. return 在函数里面代表函数结束,在main函数里面代表进程退出

exit 使用

  • _exit

_exit : 中止一个进程

exit 和 _exit 的区别:

exit 执行时,会冲刷缓冲区的数据 (即可以看到数据刷新的结果)

_exit 执行时,不会冲刷缓冲区的数据

注意:

缓冲区在用户区

$? 的使用

return返回的是退出码,且子进程退出时得到的退出码会给父进程

第一个 echo $? 得到的退出码是执行 ./test 进程的

第二个 echo $? 得到的退出码是执行 上一个echo 进程的

. . .

注意:

系统提供的错误码和错误码描述的有对应关系的

错误码及对应的错误码描述

注意:

strerror 可以用过退出码得到退出码描述

errno 可以储存最近一次错误码

  1. 异常退出

ctrl + c,信号终止


http://www.ppmy.cn/news/1522659.html

相关文章

如何恢复回收站中已删除/清空的文件

回收站清空后如何恢复已删除的文件?是否可以恢复永久删除的文件?或者最糟糕的是,如果文件直接被删除怎么办?本文将向您展示清空回收站后恢复已删除数据的最佳方法。 回收站清空后如何恢复已删除的文件? “回收站清空后…

将AI与情境定位结合以确保品牌安全

你可能会看到一些广告,感觉它们跟你在线阅读或观看的内容有奇怪的关联。这就是上下文广告在起作用。这种基于广告的解决方案在不断变化的数字环境中逐步发展,已经成为每个广告主的必备工具。不过,这种广告不只是把广告和上下文进行匹配这么简…

学习记录:js算法(二十八):删除排序链表中的重复元素、删除排序链表中的重复元素II

文章目录 删除排序链表中的重复元素我的思路解法一:循环解法二:递归 网上思路 删除排序链表中的重复元素 II我的思路网上思路 总结 删除排序链表中的重复元素 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出…

在js渲染的dom中的事件中传递对象

在某些情况下&#xff0c;可能需要将整个对象或部分对象嵌入到 HTML 元素的属性中&#xff0c;可以将对象数据序列化为 JSON 字符串&#xff0c;存储在 data-* 自定义属性中。这样可以在事件中取出并解析对象数据&#xff1a; <!DOCTYPE html> <html lang"en&qu…

Docker | Win10 安装

环境准备 1. 开启 WSL 环境配置 Docker 在 Windows 中&#xff0c;可以依赖于两种环境&#xff0c;分别是&#xff1a;Hyper-V、WSL。 Hyper-V&#xff1a;是一个虚拟环境&#xff0c;也就是虚拟机。WSL&#xff1a;是 Windows 的 Linux 子系统(系统要求不低于 Window10 的 …

八,SpringBoot Web 开发访问静态资源(附+详细源码剖析)

八&#xff0c;SpringBoot Web 开发访问静态资源(附详细源码剖析) 文章目录 八&#xff0c;SpringBoot Web 开发访问静态资源(附详细源码剖析)1. 基本介绍2. 快速入门2.1 准备工作 3. 改变静态资源访问前缀&#xff0c;定义为我们自己想要的4. 改变Spring Boot当中的默认的静态…

为何iPhone 16系列的发布对苹果至关重要?

即将发布的iPhone 16系列对苹果来说将是至关重要的时刻&#xff0c;特别是在快速发展的AI智能手机市场背景下。随着Android制造商在集成先进AI功能方面领先一步&#xff0c;苹果正处于一个关键的转折点——赶上竞争对手不仅仅是选择&#xff0c;而是必须完成的任务。 AI竞赛&am…

【深度学习详解】Task3 实践方法论-分类任务实践 Datawhale X 李宏毅苹果书 AI夏令营

前言 综合之前的学习内容&#xff0c; 本篇将探究机器学习实践方法论 出现的问题及其原因 &#x1f34e; &#x1f34e; &#x1f34e; 系列文章导航 【深度学习详解】Task1 机器学习基础-线性模型 Datawhale X 李宏毅苹果书 AI夏令营 【深度学习详解】Task2 分段线性模型-引入…

正则表达式--python

正则表达式 1、简介 概述 正确的, 符合特定规则的 字符串. 英文名叫: Regular Expression, 简称叫: re, RegExp 作用 主要是校验数据 细节 学正则, 主要是学正则的规则. 即: 哪个符号表示什么含义. 关于正则, 要求很简单, 只要能用规则, 看懂别人写的式子, 且能简单修改即可,…

springboot、flowable 生成图片发布到Docker乱码问题

flowable自带的方法生成图片时&#xff0c;如设置字体为宋体&#xff0c;则本地测试没有问题&#xff0c;因为windows自带宋体字体库&#xff0c;但是如果发布到Docker&#xff0c;则会出现乱码问题&#xff0c;因为大部分Docker并不包含宋体字体库&#xff1b; 通过Java代码&a…

VitePress 路由重写:自定义目录结构与页面生成

在使用VitePress构建文档网站时&#xff0c;你可能会遇到项目结构复杂的情况&#xff0c;特别是当你的项目是一个包含多个包的monorepo时。为了更好地组织和管理文档&#xff0c;你可能希望将文档文件放置在源代码旁边。然而&#xff0c;VitePress默认会按照特定的目录结构生成…

springboot+mybatis+vue2分页功能开发

前端框架代码 <div class"block"><span class"demonstration">完整功能</span><el-paginationsize-change"handleSizeChange"current-change"handleCurrentChange":current-page"currentPage4":page-s…

Linux多线程——日志任务的线程池实现

文章目录 线程池日志系统完善线程池的实现线程数据线程池的实现完整代码 线程池 线程池可以说是把之前所有的内容全部串联起来的一个项目 我们这里实现一个简单的版本&#xff0c;可以对其进行扩展 线程池也是一种生产者消费者模型 生产者布置任务而消费者处理任务 主要运…

Android 存储之 SharedPreferences 编码模板(工具类编码)

一、SharedPreferences 1、基本介绍 SharedPreferences 是 Android 的一个轻量级存储工具&#xff0c;它采用 key - value 的键值对方式进行存储 它允许保存和读取应用中的基本数据类型&#xff0c;例如&#xff0c;String、int、float、boolean 等 保存共享参数键值对信息的…

html记账本改写:保存数据 localStorage。

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>记账本改写</title><style>table {user-select: none;/* width: 100%; */border-collapse: collapse;}table,th,td {border: 1px solid…

Hive服务部署及Datagrip工具使用

目录 Hive服务部署 Hiveserver2服务 1&#xff09;用户说明 2&#xff09;Hiveserver2部署 &#xff08;1&#xff09;Hadoop端配置 &#xff08;2&#xff09;Hive端配置 3&#xff09;测试 &#xff08;1&#xff09;启动Hiveserver2 &#xff08;2&#xff09;使用命…

tio websocket 客户端 java 代码 工具类

为了更好地组织代码并提高可复用性&#xff0c;我们可以将WebSocket客户端封装成一个工具类。这样可以在多个地方方便地使用WebSocket客户端功能。以下是使用tio库实现的一个WebSocket客户端工具类。 1. 添加依赖 确保项目中添加了tio的依赖。如果使用的是Maven&#xff0c;可以…

第四章 类和对象(2)

4.2 类 类是封装对象的属性和行为的载体&#xff0c;Java中定义类使用class关键字&#xff0c;其语法如下&#xff1a; class 类名称{// 成员变量// 成员方法()} 在Java语言中对象的属性以成员变量的形式存在&#xff0c;对象的方法以成员方法的形式存在。本节将对类与对象进行…

WordPress的安装与简单开发教程

WordPress是目前世界上最受欢迎的开源内容管理系统&#xff08;CMS&#xff09;&#xff0c;它以简便易用、扩展性强和庞大的生态系统著称。通过它&#xff0c;你可以轻松构建博客、企业网站、电子商务平台等多种类型的网站。本文将为你介绍WordPress的安装过程&#xff0c;以及…

如何规避SQL注入漏洞

1 引言 对于很多初学者而言&#xff0c;SQL注入攻击是一种很容易被忽略的安全漏洞&#xff0c;其原理很简单&#xff0c;在日常编码中需要注意规避&#xff0c;养成良好的系统安全意识。 2 原理 SQL注入漏洞产生的根本原因&#xff0c;就是在编码过程中手动拼接sql参数造成的…