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

站长工具是什么网站模板之家免费下载

站长工具是什么,网站模板之家免费下载,专业做家具的网站,免费客户管理软件哪个好用1.进程创建 1.1fork函数初识 在linux中fork函数是⾮常重要的函数&#xff0c;它从已存在进程中创建⼀个新进程。新进程为⼦进程&#xff0c;⽽原进 程为⽗进程。 #include <unistd.h> pid_t fork(void); 返回值&#xff1a;⾃进程中返回0&#xff0c;⽗进程返回⼦进程id…

1.进程创建

1.1fork函数初识

在linux中fork函数是⾮常重要的函数,它从已存在进程中创建⼀个新进程。新进程为⼦进程,⽽原进 程为⽗进程。

#include <unistd.h>
pid_t fork(void);
返回值:⾃进程中返回0,⽗进程返回⼦进程id,出错返回-1
进程调⽤fork,当控制转移到内核中的fork代码后,内核做:
分配新的内存块和内核数据结构给⼦进程
将⽗进程部分数据结构内容拷⻉⾄⼦进程
添加⼦进程到系统进程列表当中
fork返回,开始调度器调度
当⼀个进程调⽤fork之后,就有两个⼆进制代码相同的进程。⽽且它们都运⾏到相同的地⽅。但每个进 程都将可以开始它们⾃⼰的旅程,看如下程序
int main( void )
{
pid_t pid;
printf("Before: pid is %d\n", getpid());
if ( (pid=fork()) == -1 )perror("fork()"),exit(1);
printf("After:pid is %d, fork return %d\n", getpid(), pid);
sleep(1);
return 0;
}
运⾏结果:
[root@localhost linux]# ./a.out
Before: pid is 43676
After:pid is 43676, fork return 43677
After:pid is 43677, fork return 0
这⾥看到了三⾏输出,⼀⾏before,两⾏after。进程43676先打印before消息,然后它有打印after。 另⼀个after消息有43677打印的。注意到进程43677没有打印before,为什么呢?如下图所⽰
所以,fork之前⽗进程独⽴执⾏,fork之后,⽗⼦两个执⾏流分别执⾏。注意,fork之后,谁先执⾏完 全由调度器决定。

1.2 fork的返回值

fork() 是 Unix/Linux 系统创建新进程的系统调用,其特殊之处在于 "一次调用,两次返回"

  • 在父进程中返回 子进程的 PID(>0)

  • 在子进程中返回 0

  • 出错时返回 -1

1.3写时拷贝

通常,⽗⼦代码共享,⽗⼦再不写⼊时,数据也是共享的,当任意⼀⽅试图写⼊,便以写时拷⻉的⽅ 式各⾃⼀份副本。具体⻅下图
核心概念:
写时拷贝是一种  延迟内存复制 的优化策略,父子进程  共享同一份物理内存,直到某个进程尝试  修改内存页 时,操作系统才会进行实际复制
关于触发写实拷贝的条件是:
  1. CPU 触发 页错误(Page Fault)

  2. 内核检查错误原因是否为 COW

  3. 分配新的物理页,复制原页内容

  4. 修改故障进程的页表,指向新物理页

  5. 恢复进程执行

1。4 fork调⽤失败的原因
系统中有太多的进程
实际⽤⼾的进程数超过了限制

2.终止进程

进程终⽌的本质是释放系统资源,就是释放进程申请的相关内核数据结构和对应的数据和代码
2-1 进程退出场景
代码运⾏完毕,结果正确
代码运⾏完毕,结果不正确
代码异常终⽌
2-2 进程常⻅退出⽅法
正常终⽌(可以通过 echo $? 查看进程退出码):
1. 从main返回
2. 调⽤exit
3. _exit
2-2-1 退出码
退出码(退出状态)可以告诉我们最后⼀次执⾏的命令的状态。在命令结束以后,我们可以知道命令
是成功完成的还是以错误结束的。其基本思想是,程序返回退出代码 0 时表⽰执⾏成功,没有问题。
代码 1 0 以外的任何代码都被视为不成功。
Linux Shell 中的主要退出码
2.3 exit函数

1. 标准库函数 vs 系统调用

函数原型所属标准关键差异
void exit(int status)C标准库执行完整清理:刷新缓冲区、调用atexit注册函数
void _exit(int status)POSIX系统调用直接终止进程,不执行I/O缓冲清理

资源回收关键机制

资源类型处理方式例外情况
文件描述符全部关闭
内存泄漏用户态内存不会自动释放需依赖OS内核回收
临时文件未删除的临时文件保留需手动unlink
共享内存引用计数减1计数为0时才释放

注意事项:

1. 多线程环境

  • 调用exit()会终止 整个进程(所有线程)

  • 替代方案:

    • pthread_exit() 终止当前线程

    • 主线程使用return退出

2. 信号处理冲突

  • 在信号处理函数中调用exit()是安全的

  • 避免在SIGKILL/SIGSTOP处理中操作(信号不可捕获)

2-3-1 return退出
return是⼀种更常⻅的退出进程⽅法。执⾏return n等同于执⾏exit(n),因为调⽤main的运⾏时函数会 将main的返回值当做 exit的参数。

http://www.dtcms.com/wzjs/248505.html

相关文章:

  • 虚拟空间可以做视频网站么代刷网站推广免费
  • wordpress 关站站长查询域名
  • 做网站开发要学什么语言太原百度关键词排名
  • 建立网站时要采用一定的链接结构可采用的基本方式有关键字排名查询
  • 给甜品网站做seo厦门人才网app
  • 江苏网站建设平台桌子seo关键词
  • 网站编辑是什么东莞快速优化排名
  • 网站运营每天做的优化网站怎么做
  • 网上购物网站设计百度百家官网入口
  • 微信小程序网站开发网站seo整站优化
  • 化工网站源码关键字挖掘机爱站网
  • wordpress获取当前子分类整站优化推广
  • axure rp可以做网站吗京东seo搜索优化
  • 北京pc端网站开发seo技术教程
  • 南京建设行政主管部门网站口碑营销的产品有哪些
  • 广东网站设计推荐免费发布产品的网站
  • 上海南桥网站建设高端网站建设
  • 网站设计经典案例分析seo优化方法有哪些
  • 网站开发加维护大概多少钱域名查询138ip
  • wordpress为自定义文章类型模板杭州百度推广优化排名
  • 网站设计一个版块东莞网站推广及优化
  • 电脑做网站主机空间如何将网站的关键词排名优化
  • 电商网站运营步骤关键词全网搜索
  • 国际婚恋网站做翻译合法吗seo策略主要包括
  • 网站设计理念广州信息流推广公司
  • 哪个网站做外贸浏览器搜索引擎大全
  • 个人网站可以做淘客plc培训机构哪家最好
  • 网站建设指引国际新闻最新消息今天 新闻
  • wordpress 备份数据库seo优化报告
  • 在线爱情动做网站怎么在百度上发布信息广告