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

Linux学习记录(九)----进程(四)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

      • 8.vfork创建进程
      • 9.进程退出
        • 1.正常退出
        • 2.异常退出


上篇:进程(一)
中1:进程(二)
中2:进程(三)

8.vfork创建进程

vfork也可以创建进程,与fork有什么区别呢?

  • 区别一:vfork可以直接使用父进程存储空间,不拷贝

  • 区别二:vfork可以保证子进程先运行,当子进程调用exit退出后,父进程才执行

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>int main()
{int cnt = 0;pid_t pid;pid = vfork();if(pid == -1){printf("craete process failed\n");return -1;}else if(pid > 0){while(1){printf("cnt = %d\n",cnt);printf("parent process pid is %d\n",getpid());sleep(1);}}else if(pid == 0){while(1){cnt++;printf("cnt = %d\n",cnt);printf("child process pid is %d,ppid is %d\n",getpid(),getppid());sleep(1);if(cnt > 3){exit(0);}}}return 0;
}

在这里插入图片描述

9.进程退出

1.正常退出
  • 1.main函数调用return

  • 2.进程调用exit(),标准C库

  • 3.进程调用 _exit() 或者 _Exit(),属于系统调用

补充:

  • 4.进程最后一个线程返回

  • 5.最后一个线程调用pthread_exit

2.异常退出
  • 1.调用abort函数

  • 2.当进程收到某些信号时,比如ctrl +C

  • 3.最后一个线程对取消(cancellation)请求做出相应

不管进程如何终止,最后都会执行内核中的同一段代码,这段代码和相应进程关闭所有打开描述符,释放它所使用 的存储器等。 对上述任一一种终止情形,我们都希望终止进程能够通知其父进程它是如何终止的。对于三个终止函数(exit, _exit 和 _ Exit),实现这一点的方法是,将其退出状态(exit status)作为参数传送给函数,在异常终止情况下,内核(不是 进程本身)产生一个指示其异常终止原因的终止状态(termination status)。在任意一种情况下,该终止进程的父进 程都能用wait或waitpid函数取得终止状态。

#include <stdlib.h>
void exit(int status);
#include <unistd.h>
void _exit(int status);
#include <stdlib.h>
void _Exit(int status);

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Vue3 Suspense 和 defineAsyncComponent 结合使用方法
  • springboot使用new方法实例化一个对象,在new的方法中要使用service或mapper接口方法
  • 双非计算机硕学FPGA有出路吗?
  • Element UI动态实现面包屑导航~
  • 1区Top期刊竟24小时内就录用?这7篇论文是走运吗,同行评审这一关怎么过的?
  • 图数据库框架及其支持的开发语言和应用场景
  • 【JAVA开发】JAVA开发手册
  • Hadoop大集群配置文档-粗略版-3万字长文 (包括hive,zookeeper,hbase,flume等中间件和mysql等)
  • git修改已提交的message信息
  • 微信拼团活动的制作步骤是什么
  • plsql不安装oracle能连接数据库吗 plsql不安装oracle客户端连接远程数据库怎么操作
  • 如何开放MySQL允许远程访问权限?MySQL如何远程访问?
  • LinuxC高级day04(gcc、gdb、makefile工具)
  • python媒体下载工具 you-get
  • centos安装rclone挂载alist
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 【刷算法】求1+2+3+...+n
  • Akka系列(七):Actor持久化之Akka persistence
  • Codepen 每日精选(2018-3-25)
  • ComponentOne 2017 V2版本正式发布
  • Django 博客开发教程 8 - 博客文章详情页
  • Spark学习笔记之相关记录
  • spring + angular 实现导出excel
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • 搞机器学习要哪些技能
  • 记一次删除Git记录中的大文件的过程
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 聊聊hikari连接池的leakDetectionThreshold
  • 如何利用MongoDB打造TOP榜小程序
  • 微信支付JSAPI,实测!终极方案
  • 一份游戏开发学习路线
  • 智能合约Solidity教程-事件和日志(一)
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • 第二十章:异步和文件I/O.(二十三)
  • #QT项目实战(天气预报)
  • #前后端分离# 头条发布系统
  • (1)Hilt的基本概念和使用
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (补充)IDEA项目结构
  • (纯JS)图片裁剪
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (汇总)os模块以及shutil模块对文件的操作
  • (佳作)两轮平衡小车(原理图、PCB、程序源码、BOM等)
  • (蓝桥杯每日一题)love
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .net 获取url的方法
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .net6 webapi log4net完整配置使用流程