进程控制
来源:互联网 发布:怎么成为大数据分析师 编辑:程序博客网 时间:2024/06/06 00:59
本编博客主要介绍进程的一些基本概念
感谢观看,欢迎提出问题
联系方式:blbagony@163.com
进程
1. 进程标志
每一个进程都有一个非负整数用来表示唯一的进程,这个整数就是进程 ID 可以用 ps 命令和 top 命令来查看。
除了进程 ID 还有一些其他标识符。下列函数返回这些标识符
2. 函数 fork
- 已给现有的进程可以调用 fork 函数创建一个新进程。
frok 函数被调用一次返回两次,区别是,当返回值为 0 时,表示子进程,当返回值 > 0 表示父进程,其返回值即子进程的进程 ID。错误返回 -1,并设置 errno。
为什么给父进程返回子进程 ID:
因为一个进程的子进程可以有多个,并且没有一个函数可以返回一个进程所有子进程 ID。为什么给子进程返回 0
因为对每个进程而言只有一个父进程,可以调用 getppid 函数获取其父进程 ID。在父进程执行 fork 函数之后,子进程和父进程继续执行 fork 之后的命令。此时子进程是父进程的副本,子进程获得父进程的数据空间、堆和栈的副本。需要注意的是:这是子进程所拥有的副本。父进程和子进程并不共享这些存储空间。父进程和子进程共享正文段(用来放代码)。
由于 fork 之后经常伴随着 exec,所以现在很多实现并不执行一个父进程数据段、栈和堆的完全副本。作为替代,使用了写时拷贝技术,当父进程或子进程试图修改这些区域时,系统会为该区域制作一个副本,通常是虚拟存储系统中的“一页”。
文件共享
- 在重定向父进程的标准输出时,子进程的标准输出也被重定向,fork 的一个特性是父进程打开的所有文件描述符都被复制到子进程之中。
重要的一点,父进程和子进程共享同一个文件偏移量。
父进程和子进程之间的区别:
fork 的返回值不同
进程 ID 不同
两个进程的父进程不同
子进程的 tms_utime、tms_stime、tms_cutime 和 tms_ustime 的值设置为 0
子进程不继承父进程设置的文件锁
子进程未处理的文件闹钟被清除
子进程未处理的信号集置为空
fork 失败的两个主要原因
系统已经有太多的进程
该实际用户 ID 的进程总数超过了系统限制。
进程终止:
进程终止有八种方式,其中五中未正常终止:
(1) 从 main() 函数中返回;
(2) 调用 eixt;
(3) 调用 _eixt 或 _EXIT;
(4) 最后一个线程从启动例程中返回;
(5) 从最后一个线程中调用 pthread_exit;异常终止的三种方式
(6) 调用 abort;
(7) 接收到一个信号;
(8) 最后一个线程对取消做出相应。
- 退出函数
三个函数用于正常终止一个程序:_exit 和 _EXIT 立即进入内核,exit 则先进行一些清理处理,然后返回内核。
#include <stdlib.h>void exit(int status)void _EXIT(int status)#include <unistd.h>void _exit(int status)三个函数都有一个整型参数,称之为终止状态或是退出码。unix 大多数 shell 都提供检查进程终止状态的方法,一般是 $? 。在 main 函数中调用 exit(0) 和 调用 return (0) 是一样的。
- 函数 atexit
一个进程可以登记多至 32 个函数,这些函数将由 exit 自动调用,我们称这些函数为终止处理程序,并调用 atexit 函数来登记这些函数。
atexit 参数是一个函数地址,当调用此函数时不用传递任何参数,也不需其起返回值。exit 调用这些函数的顺序与他们登记时候的顺序相反。
执行结果:
- 进程控制
- 进程控制
- 进程控制
- 进程控制
- 进程控制
- 进程控制
- 进程控制
- 进程控制
- 进程控制
- 进程控制
- 进程控制
- 进程控制
- 进程控制
- 进程控制
- 进程控制
- 进程控制
- 进程控制 .
- 进程控制
- ise使用
- libEasyPlayer RTSP播放器库API接口说明
- qtableView大量数据显示
- 微信小程序request配置HTTPS
- 阿里、腾讯、百度、华为、京东、搜狗和滴滴最新面试题汇集
- 进程控制
- 深度学习:正则化(L2、dropout)
- 运算方法
- 【Scikit-Learn 中文文档】半监督学习
- 记录快速傅里叶变换计算相关面并附tensorflow相应层代码
- 绘制金字塔
- 面试感悟:3年工作经验java程序员应有的技能
- 每天回顾linux命令(whoami)
- 微信域名屏蔽检测:微信黑科技工具集源码