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

无涯教程-进程 - 创建终止

到现在为止,我们知道无论何时执行程序,都会创建一个进程,并且该进程将在执行完成后终止,如果我们需要在程序中创建一个进程,并且可能希望为其安排其他任务,该怎么办。能做到吗?是的,显然是通过进程创建的,当然,工作完成后,它将自动终止,或者您可以根据需要终止它。

进程创建是通过 fork()系统调用实现的,新创建的进程称为子进程,而启动它的进程(或开始执行时的进程)称为父进程。在fork()系统调用之后,现在我们有两个进程-父进程和子进程。如何区分它们?很简单,就是通过它们的返回值。

System Call

创建子进程后,让我们看到fork()系统调用详细信息。

#include <sys/types.h>
#include <unistd.h>pid_t fork(void);

创建子进程,此调用之后,有两个进程,现有的一个称为父进程,而新创建的一个称为子进程。

fork()系统调用返回以下三个值之一:

  • 负值  - 表示错误,即创建子进程失败。

  • 0       - 表示为子进程。

  • 正值 - 表示新创建的子进程的进程ID。

让我们考虑一个简单的程序。

File name: basicfork.c
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>int main() {fork();printf("Called fork() system call\n");return 0;
}

执行步骤

汇编

gcc basicfork.c -o basicfork

执行/输出

Called fork() system call
Called fork() system call

注意-通常在fork()调用之后,子进程和父进程将执行不同的任务。如果需要运行相同的任务,则对于每个fork()调用,它将运行2次幂n次,其中 n 是fork()被调用的次数。

看到fork()创建了子进程之后,就该查看父进程和子进程的详细信息了。

文件名:pids_after_fork.c

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>int main() {pid_t pid, mypid, myppid;pid = getpid();printf("Before fork: Process id is %d\n", pid);pid = fork();if (pid < 0) {perror("fork() failure\n");return 1;}//Child processif (pid == 0) {printf("This is child process\n");mypid = getpid();myppid = getppid();printf("Process id is %d and PPID is %d\n", mypid, myppid);} else { //Parent process sleep(2);printf("This is parent process\n");mypid = getpid();myppid = getppid();printf("Process id is %d and PPID is %d\n", mypid, myppid);printf("Newly created process id or child pid is %d\n", pid);}return 0;
}

汇编&执行

Before fork: Process id is 166629
This is child process
Process id is 166630 and PPID is 166629
Before fork: Process id is 166629
This is parent process
Process id is 166629 and PPID is 166628
Newly created process id or child pid is 166630

进程可以通过以下两种方式之一终止:

  • 通常在传递某些信号(如终止信号)时发生。

  • 通常,使用_exit()系统调用(或_Exit()系统调用)或exit()库函数。

_exit()和exit()之间的区别主要是清理活动, exit()在将控件返回内核之前会进行一些清理,而 _exit()(或_Exit())会将控件立即返回内核。 

考虑以下带有exit()的示例程序。

文件名称:atexit_sample.c

#include <stdio.h>
#include <stdlib.h>void exitfunc() {printf("Called cleanup function - exitfunc()\n");return;
}int main() {atexit(exitfunc);printf("Hello, World!\n");exit (0);
}

汇编&执行

Hello, World!
Called cleanup function - exitfunc()

考虑以下带有_exit()的示例程序。

文件名称:at_exit_sample.c

#include <stdio.h>
#include <unistd.h>void exitfunc() {printf("Called cleanup function - exitfunc()\n");return;
}int main() {atexit(exitfunc);printf("Hello, World!\n");_exit (0);
}

汇编&执行

Hello, World!

进程 - 创建&终止 - 无涯教程网无涯教程网提供到现在为止,我们知道无论何时执行程序,都会创建一个进程,并且该进程将在执行完成后...https://www.learnfk.com/process/inter-process-communication-process-creation-termination.html

相关文章:

无涯教程-进程 - 创建终止

到现在为止&#xff0c;我们知道无论何时执行程序&#xff0c;都会创建一个进程&#xff0c;并且该进程将在执行完成后终止&#xff0c;如果我们需要在程序中创建一个进程&#xff0c;并且可能希望为其安排其他任务&#xff0c;该怎么办。能做到吗?是的&#xff0c;显然是通过…...

LLMs参考资料第一周以及BloombergGPT特定领域的训练 Domain-specific training: BloombergGPT

1. 第1周资源 以下是本周视频中讨论的研究论文的链接。您不需要理解这些论文中讨论的所有技术细节 - 您已经看到了您需要回答讲座视频中的测验的最重要的要点。 然而&#xff0c;如果您想更仔细地查看原始研究&#xff0c;您可以通过以下链接阅读这些论文和文章。 1.1 Trans…...

LeetCode字符串数组最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 “”。 示例 1&#xff1a; 输入&#xff1a;strs [“flower”,“flow”,“flight”] 输出&#xff1a;“fl” 示例 2&#xff1a; 输入&#xff1a;strs [“dog”,“raceca…...

Git gui教程---第八篇 Git gui的使用 创建一个分支

一般情况下一个主分支下代码稳定的情况下会新建出一个分支&#xff0c;然后在分支上修改&#xff0c;修改完成稳定后再合并到主分支上。 或者几个人合作写一份代码&#xff0c;每个人各一个分支&#xff0c;测试稳定再合并到主分支上。 在git gui选择菜单栏“分支”&#xff0…...

Docker修改daemon.json添加日志后无法启动的问题

docker实战(一):centos7 yum安装docker docker实战(二):基础命令篇 docker实战(三):docker网络模式(超详细) docker实战(四):docker架构原理 docker实战(五):docker镜像及仓库配置 docker实战(六):docker 网络及数据卷设置 docker实战(七):docker 性质及版本选择 认知升…...

QT6编译的文件分布情况

工程文件和编译文件位置分布 工程文件是自己建立的源文件位置&#xff0c;而同等级的位置在工程构建时会重新生成一个编译后的文件夹&#xff0c;里面包含了可执行的exe文件。而这个文件夹的内容也是QT ide运行时读取的文件&#xff0c;但这个文件的内容在IDE中如果不重新构建…...

2023中国算力大会 | 中科驭数加入DPU推进计划,探讨DPU如何激活算网融合新基建

8月18日&#xff0c;由工业和信息化部、宁夏回族自治区人民政府共同主办的2023中国算力大会在宁夏银川隆重召开。作为DPU算力基础设施领军企业&#xff0c;中科驭数产品运营部副总经理曹辉受邀在中国信通院承办的算网融合分论坛发表主题演讲《释放极致算力 DPU激活算网融合新基…...

leetcode 115. 不同的子序列

2023.8.25 使用dp数组解决。 定义一个二维dp数组&#xff0c;dp[i][j]的含义为&#xff1a;字符串s&#xff08;下标为i-1&#xff09;中&#xff0c;子序列t&#xff08;下标为j-1&#xff09;出现的个数。 当字符串s[i-1]和t[j-1]相同时&#xff0c;递推公式为&#xff1a;d…...

gradio应用transformer模块部署生成式人工智能应用程序

文章目录 gradio简介hello world范例文本分类文本问答抽取式问答gr.Interface自定义实现问答Blocks使用gradio简介 gradio只需在原有的代码中增加几行,就能自动化生成交互式web页面,并支持多种输入输出格式,比如图像分类中的图>>标签,超分辨率中的图>>图等。 …...

【目标检测】“复制-粘贴 copy-paste” 数据增强实现

文章目录 前言1. 效果展示代码说明3. 参考文档4. 不合适点 前言 本文来源论文《Simple Copy-Paste is a Strong Data Augmentation Method for Instance Segmentation》&#xff08;CVPR2020&#xff09;&#xff0c;对其数据增强方式进行实现。 论文地址&#xff1a;https:/…...

深度学习知识总结2:主要涉及深度学习基础知识、卷积神经网络和循环神经网络

往期链接&#xff1a;Summer 1 : Summarize linear neural networks and multi-layer perceptron Summer 2: Summarize CNN and RNN 文章目录 Summer 2: Summarize CNN and RNNPart 1 Deep Learning> 层和块> 参数管理和延后初始化> 读写文件和GPU Part 2 CNN> 从…...

Spring Boot 集成 WebSocket 实现服务端推送消息到客户端

WebSocket 简介 WebSocket 协议是基于 TCP 的一种新的网络协议&#xff0c;它实现了浏览器与服务器全双工&#xff08;full-duplex&#xff09;通信—允许服务器主动发送信息给客户端&#xff0c;这样就可以实现从客户端发送消息到服务器&#xff0c;而服务器又可以转发消息到客…...

vr游乐场项目投资方案VR主题游乐馆互动体验

VR文旅景区沉浸互动体验项目是指利用虚拟现实技术在文旅景区中创建沉浸式的互动体验项目。通过虚拟现实技术&#xff0c;游客可以身临其境地体验景区的风景和文化&#xff0c;与虚拟场景中的元素进行互动。 普乐蛙VR设备 普乐蛙VR设备案例分享 这种项目可以为游客带来全新的旅游…...

chrom扩展开发配合百度图像文字识别实现自动登录(后端.net core web api)

好久没做浏览器插件开发了&#xff0c;因为公司堡垒机&#xff0c;每次登录都要输入账号密码和验证码。太浪费时间了&#xff0c;就想着做一个右键菜单形式的扩展。 实现思路也很简单&#xff0c;在这里做下记录&#xff0c;方便下次开发参考。 一&#xff0c;先来了解下chro…...

香港服务器怎么打开SSH

​  SSH是一种远程登录协议&#xff0c;可以通过加密方式在网络上安全地传输数据。它允许用户在远程服务器上执行命令&#xff0c;管理文件和目录&#xff0c;并进行其他系统管理任务。 如何打开SSH服务? 1.确认已安装OpenSSH服务器&#xff1a; 你可以通过命令sudoapt-geti…...

【LeetCode】437.路径总和Ⅲ

题目 给定一个二叉树的根节点 root &#xff0c;和一个整数 targetSum &#xff0c;求该二叉树里节点值之和等于 targetSum 的 路径 的数目。 路径 不需要从根节点开始&#xff0c;也不需要在叶子节点结束&#xff0c;但是路径方向必须是向下的&#xff08;只能从父节点到子节…...

Mybatis-plus中操作JSON字段

1.实体类上要加上自动映射 TableName(value "school", autoResultMap true)2.json字段上加上json处理器 TableField(value "cover_url", typeHandler JacksonTypeHandler.class)private List<String> cover_url;参考博客 http://www.dedeyun.co…...

第十五课、Windows 下打包发布 Qt 应用程序

功能描述&#xff1a;讲解了 Windows 下打包发布 Qt 应用程序的三种方法&#xff0c;并对比优缺点 一、利用 windepolyqt 工具打包发布 Qt 提供了一个 windeployqt 工具来自动创建可部署的文件夹。 打包发布流程&#xff1a; 1. 新建一个文件夹&#xff0c;将编译后的可执行…...

【php】windows下php运行已有php web项目环境配置教程

php环境配置教程 php安装composer安装扩展安装redis扩展安装 composer install 本文操作系统使用的是win11&#xff0c;软件PhpStorm 2023.1 php安装 要安装的php版本可以在composer.json看到&#xff0c;下载安装对应版本 windows下载地址https://windows.php.net/download …...

【mybatis】 mybatis在mysql 更新update 操作 更新时间字段按照年月日时分秒格式 更新为当前时间...

参考链接 【mybatis】 mybatis在mysql 更新update 操作 更新时间字段按照年月日时分秒格式 更新为当前时间…...

C++动态规划经典案例解析之合并石子

1. 前言 区间类型问题&#xff0c;指求一个数列中某一段区间的值&#xff0c;包括求和、最值等简单或复杂问题。此类问题也适用于动态规划思想。 如前缀和就是极简单的区间问题。如有如下数组&#xff1a; int nums[]{3,1,7,9,12,78,32,5,10,11,21,32,45,22}现给定区间信息[…...

go MongoDB

安装 go get go.mongodb.org/mongo-driver/mongo package mongodbexampleimport ("context""fmt""ginapi/structs""time""go.mongodb.org/mongo-driver/bson""go.mongodb.org/mongo-driver/bson/primitive""…...

算法与数据结构(八)--优先队列

普通的队列是一种先进先出的数据结构&#xff0c;元素在队列尾追加&#xff0c;而从队列头删除&#xff0c;在某些情况下&#xff0c;我们可能需要找出队列中的最大值或者最小值。 例如使用一个队列保存计算机的任务&#xff0c;一般情况下计算机的任务都是有优先级的&#xff…...

React 全栈体系(三)

第二章 React面向组件编程 四、组件三大核心属性3: refs与事件处理 1. 效果 需求: 自定义组件, 功能说明如下: 点击按钮, 提示第一个输入框中的值当第2个输入框失去焦点时, 提示这个输入框中的值 2. 理解 组件内的标签可以定义ref属性来标识自己 3. 编码 3.1 字符串形式…...

腾讯云下一代CDN -- EdgeOne加速MinIO对象存储

省流 使用MinIO作为EdgeOne的源站。 背景介绍 项目中需要一个兼容S3协议的对象存储服务&#xff0c;腾讯云的COS虽然也兼容S3协议&#xff0c;但是也只是支持简单的上传下载&#xff0c;对于上传的时候同时打标签这种需求&#xff0c;就不兼容S3了。所以决定自建一个对象存储…...

GitLab-CI 指南

GitLab CI 指南 前置工作 部署GitLab 部署GitLab-Runner 注册Runner到GitLab docker exec -it gitlab-runner bash # 进入容器 gitlab-runner register #调用register命令开始注册 # 在Gitlab Setting中找到Runners,如下图所示Enter the GitLab instance URL (for example, …...

MyBatis的核心技术掌握,简单易懂(上)

目录 一.MyBatis中的动态SQL 二.MyBatis中的模糊查询 1. # 符号 2. $ 符号 ---问题 ---所以大家知道 # 和 $ 在MyBatis中的模糊查询中的区别了嘛&#xff1f;&#xff1f; 三.MyBatis 中的结果映射 1. resultType&#xff1a; 2. resultMap&#xff1a; ---问题 ---…...

Redisson自定义序列化

Redisson自定义序列化_redisson 序列化_yzh_1346983557的博客-CSDN博客 redis存取的数据一定是可序列化的&#xff0c;而可序列化方式可以自定义。如果不同客户端设置的可序列化方式不一样&#xff0c;会导致读取不一致的问题。常见的序列化方式有几下几种...

MongoDB Long 类型 shell 查询

场景 1、某数据ID为Long类型&#xff0c;JAVA 定义实体类 Id Long id 2、查询数据库&#xff0c;此数据存在 3、使用 shell 查询&#xff0c;查不到数据 4、JAVA代码查询Query.query 不受任何影响 分析 尝试解决&#xff08;一&#xff09; long 在 mongo中为 int64 类型…...

回归预测 | MATLAB实现GA-APSO-IBP改进遗传-粒子群算法优化双层BP神经网络多输入单输出回归预测

回归预测 | MATLAB实现GA-APSO-IBP改进遗传-粒子群算法优化双层BP神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现GA-APSO-IBP改进遗传-粒子群算法优化双层BP神经网络多输入单输出回归预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 MATLAB实现GA-…...

网站网站环境搭建教程/优化网站打开速度

调试环境&#xff1a;win10vs2015在编程中我们经常需要使用随机数用来进行测试&#xff0c;因此就需要使用到rand()函数&#xff0c;这里就来详解一下C语言随机数生成器。rand()函数的原型是&#xff1a;int rand ( void );该函数不需要传参&#xff0c;返回一个伪随机整数范围…...

免费下载ppt模板的网站有哪些/网络营销的主要工作有哪些

2019独角兽企业重金招聘Python工程师标准>>> 面向全球电子商务知识库网站eBizMBA公布了2011年国外十大最佳Logo设计资源网站&#xff1a; 1 99designs (http://99designs.com/) 99designs包括平面设计&#xff0c;logo设计&#xff0c;网页设计及其他设计服务&#…...

在国内做推广产品用什么网站好/网站推广一般多少钱

微信分享JSSDK-invalid signature签名错误的解决方案参考文章&#xff1a; &#xff08;1&#xff09;微信分享JSSDK-invalid signature签名错误的解决方案 &#xff08;2&#xff09;http://www.cnblogs.com/vipstone/p/6732660.html 备忘一下。...

兰州新站seo/友情链接管理系统

Apple ProRes 编解码器提供独一无二的多码流实时编辑性能、卓越图像质量和降低的存储率组合。Apple ProRes 编解码器充分利用多核处理&#xff0c;并具有快速、降低分辨率的解码模式。 所有 Apple ProRes 编解码器都支持全分辨率的任意帧尺寸&#xff08;包括 SD、HD、2K、4K 和…...

网站建设在哪里备案/链接推广

原文地址&#xff1a;8种廉价食物的养胃奇效&#xff08;图&#xff09;作者&#xff1a;三江养胃食物 包心菜 要想养胃&#xff0c;包心菜绝对不能少&#xff0c;它具有健脾养胃、缓急止痛、解毒消肿、清热利水的作用。而且在包心菜中还含有大量的维生素C&#xff0c;这种物质…...

企业网站建设经验/小黄豆crm

matlab 去噪工具箱 0、Multivariate Wavelet Denoising 该方法报错 sig dff(somaIndex,:); dsig wdenoise(sig,Wavelet,sym8,DenoisingMethod,SURE,ThresholdRule,Soft); 这个网页专门讲去噪的&#xff1a; Multivariate Wavelet Denoising- MATLAB & Simulink- MathWor…...