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

众筹网站建设公司html5网站管理系统

众筹网站建设公司,html5网站管理系统,抖音seo排名系统公司,陕西省交通建设集团公司西商分公司网站目录 1、进程创建 1.1 fork 1.2 fork的常规用法 1.3 fork失败的原因 2、进程退出 2.1 基本概念 2.2 进程退出场景 2.3 退出码 2.4 进程常见退出方式 3、进程等待 3.1 进程等待的必要性 3.2 进程等待的方式 3.2.1 wait 3.2.2 waitpid(常用) 4、进程程序替换 4.1 …

目录

1、进程创建

1.1 fork

1.2 fork的常规用法

1.3 fork失败的原因

2、进程退出

2.1 基本概念

2.2 进程退出场景

2.3 退出码

2.4 进程常见退出方式

3、进程等待

3.1 进程等待的必要性

3.2 进程等待的方式

3.2.1 wait

3.2.2 waitpid(常用)

4、进程程序替换

4.1 替换原理

4.2 替换函数


1、进程创建

1.1 fork

通过fork(系统调用),创建子进程

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{int ret = fork();printf("hello proc : %d!, ret: %d\n", getpid(), ret);sleep(1);return 0;
}
  • 两个返回值,对父进程返回子进程的PID对子进程返回0。因为父:子 = 1:N,父进程需要区分子进程,而子进程能通过PPID找到父进程。所以可以if,让父子进程执行不同的语句
  • fork() 创建子进程后,父子进程从 fork() 返回处继续执行注意:子进程不会执行fork()之前的代码。
  • 父子进程尝试修改数据,会发生写时拷贝(减少创建子进程的时间,减少内存浪费),重新拷贝一份数据。所以父子进程独立运行

1.2 fork的常规用法

  1. 父进程创建子进程后,父子进程各自执行不同的逻辑
  2. 子进程通过 exec 系列函数完全替换为另一个程序

1.3 fork失败的原因

  1. 进程总数超过内核限制。

  2. 用户进程数超过配额。

2、进程退出

2.1 基本概念

进程退出,释放代码和数据没有释放PCB对象

2.2 进程退出场景

  1. 代码运行完毕,结果正确
  2. 代码运行完毕,结果不正确
  3. 代码异常终止(一般是收到了信号)。

2.3 退出码

  1. 如果是异常终止退出码无意义(代码都没执行完)。
  2. 不是异常终止0结果正确非0结果不正确(不同的值,表示不同的原因)。

注意:

  • $?,显示最近一个进程退出时的退出码。
  • errno当系统调用或库函数发生错误时errno会被设置为对应的错误码。需包含<errno.h>。
  • strerror()根据错误码显示错误信息

2.4 进程常见退出方式

  1. main函数return 退出码,(其他函数的return,只表示函数调用完成),表示进程退出
  2. _exit(退出码)系统调用进程退出
  3. exit(退出码)C标准库函数(封装了exit()),进程退出,还会刷新I/O缓冲区等

3、进程等待

3.1 进程等待的必要性

子进程退出父进程需要获取子进程退出前的信息(即子进程PCB对象里面的信息,其指向的代码和数据已被释放,可选),并释放子进程的PCB对象(必要),如果父进程没有"回收"子进程,那么子进程被称为"僵尸进程",其PCB对象将会一直存在,造成内存泄漏

父进程通过进程等待的方式"回收"子进程

3.2 进程等待的方式

3.2.1 wait
// stat_loc 输出型参数,记录子进程的退出状态
pid_t wait(int *stat_loc);
  • 父进程阻塞等待 任意一个退出的子进程,若子进程退出,返回子进程的pid,若调用失败,返回-1
3.2.2 waitpid(常用)
// pid,指定等待子进程,stat_loc,子进程的退出信息,options,功能
pid_t waitpid(pid_t pid, int *stat_loc, int options);
  • pid等待指定pid的子进程。若为-1等待任意一个退出的子进程
  • stat_loc输出型参数,32位,高16位不用。

正常退出次第八位进程退出码低八位0

异常终止(一般是收到了信号),次第八位无意义(因为代码都没执行完),低八位core dump(一位)+信号编号(七位)。

WEXITSATTUS(stat_loc)获取退出码

WIFEXITED(stat_loc)子进程正常退出,为,否则,为假。

  • options,为0,父进程阻塞等待(一直等,直到子进程退出),若子进程退出返回子进程pid,若调用失败(如pid不存在),返回-1。为WNOHANG,父进程非阻塞等待(询问一次,知道子进程的状态,父进程可以做自己的事,一般需要多次询问),若子进程退出返回子进程pid,若子进程没有退出返回0,若调用失败(如pid不存在),返回-1

4、进程程序替换

4.1 替换原理

fork 创建子进程后,子进程执行的是和父进程相同的程序(但可能执行不同的代码分支)。子进程通常会调用一种 exec 函数以执行另一个程序。当进程调用 exec 函数时,该进程的用户空间代码和数据会被新程序完全替换(替换就是进行修改,触发写时拷贝,然后覆盖),并从新程序的启动例程开始执行。调用 exec 不会创建新进程,因此调用前后该进程的 PID 保持不变

4.2 替换函数

path/file,是要执行谁arg/argv,是怎么执行(命令行怎么写,就怎么写),envp设置新的环境变量(会覆盖原有的环境变量)

int execl(const char *path, const char *arg0, ..., NULL);
int execlp(const char *file, const char *arg0, ..., NULL);
int execle(const char *path, const char *arg0, ..., NULL, char *const envp[]);int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
int execvpe(const char *file, char *const argv[], char *const envp[]);
函数名参数传递方式是否按照 PATH(环境变量)搜索是否指定环境变量后缀含义
execl字符串列表❌ 否❌ 默认环境l=list
execv字符串数组❌ 否❌ 默认环境v=vector
execlp字符串列表✅ 是❌ 默认环境p=PATH
execvp字符串数组✅ 是❌ 默认环境p=PATH
execle字符串列表❌ 否✅ 自定义环境e=environment
execvpe字符串数组✅ 是✅ 自定义环境pe=PATH+environment

注意:

  • exec系列函数,调用失败返回-1调用成功直接替换成新的程序了,无需返回值。所以不用进行返回值判断,因为执行exec后面的代码一定是失败了。
  • 无论是字符串列表还是字符串数组,都要显示NULL结尾
  • 带了p,就默认在PATH的环境变量下搜索命令。不带p,要提供绝对路径相对路径
  • 带了e,就设置新的环境变量(会覆盖原有的环境变量)。
  • 如果新增环境变量不想覆盖原有的环境变量子进程直接putenv(),使用后缀函数替换的程序默认使用子进程的环境变量。如果使用带 后缀函数,就传environ(指向当前进程的环境变量表的指针,需声明extern char ** environ;),替换的程序继承子进程的环境变量
  • 还有execve,是系统调用上面的函数,是对execve的封装,以满足不同的场景
int execve(const char *path, char *const argv[], char *const envp[]);

文章转载自:

http://icZe93pd.ykshx.cn
http://zWYG6rRB.ykshx.cn
http://7wDakcpm.ykshx.cn
http://V7BkkBU0.ykshx.cn
http://yaKMRCIW.ykshx.cn
http://NJpkmU06.ykshx.cn
http://rHYzAORT.ykshx.cn
http://lTGB9Ube.ykshx.cn
http://T5mZq6e9.ykshx.cn
http://2JlVOauW.ykshx.cn
http://7heaX5Zp.ykshx.cn
http://nSMmTWH3.ykshx.cn
http://z193hKD7.ykshx.cn
http://0qJLA4jl.ykshx.cn
http://mfyqeJAc.ykshx.cn
http://bh5BiTo4.ykshx.cn
http://7aeuSHrq.ykshx.cn
http://7Mqnr6iS.ykshx.cn
http://dwaZg2vU.ykshx.cn
http://mEAsPHZB.ykshx.cn
http://IlROvW2E.ykshx.cn
http://ASdmDzEV.ykshx.cn
http://OttvlpUQ.ykshx.cn
http://Q6YaHYiS.ykshx.cn
http://shN17JVV.ykshx.cn
http://9WDC9MH0.ykshx.cn
http://zPLxtiNH.ykshx.cn
http://4aXbfDDg.ykshx.cn
http://uxSS9Nrb.ykshx.cn
http://p3vXkAHw.ykshx.cn
http://www.dtcms.com/wzjs/754924.html

相关文章:

  • 首码项目推广网站网站建设 国鸿
  • 南通网站建设搭建专业电商网站建设
  • 贵阳企业网站排名优化仙侠类网页游戏排行榜
  • 温州网站建设网络找百度公司做网站怎么样
  • 曲靖网站制作上海网站se0优化
  • 网站建设公司的服务定位企业的管理系统有哪些
  • 厦门seo建站本地网站更新不了 vps登陆可以
  • 免费商城网站模板微信公众号登录入口在哪里
  • 电子商务网站规划 分析 设计wordpress的用途
  • 贵阳开发网站注册一个互联网公司需要多少钱
  • 做网站一般会出现的问题找人做ps的网站
  • 用手机如何做网站网站 备案 异地
  • 怎样做网站建设方案机关事业单位网站建设
  • 电子商城官方网站合作社网站模板
  • 考试微网站开发电商详情页模板的网站
  • asp.net答辩做网站服务器win7网站建设
  • 公司做企业网站沈阳网站建设本地化技术服务
  • 怎样免费注册自己网站的域名旅游网站建设开题报告
  • 网站建设设计哪个济南兴田德润简介建筑网格布生产厂家
  • 实验室网站建设的意义最成功的个人网站
  • 教做月嫂的网站有吗深圳专业网站排名公司
  • 安居客网站是用什么程序做的网站开发先找UI吗
  • asp.net网站建设wordpress站点实例
  • 网站建设 教学视频什么是crm管理系统
  • 国外网站模板欣赏wordpress 移动插件
  • 做标签这个网站刷单安全吗哈尔滨建筑业协会网站
  • 公司网站要更新wordpress 卡密注册
  • creo二次开发快速排名优化推广价格
  • 微网站自助建站后台免费装修效果图大全
  • 白沙网站建设wordpress拖拽建站