当前位置: 首页 > 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/833946.html

相关文章:

  • vue做的pc线上网站深圳设计网站培训学校
  • 做网站程序先从哪一步开始网易企业邮箱大师登录
  • 庐江有做网站的吗连锁销售网站制作
  • 许昌北京网站建设网页程序设计软件
  • 云南做公司网站多少钱网络服务提供者是不是网络运营者
  • 热转印 东莞网站建设wordpress 后台加速
  • 电子商务网站建设pdfwordpress 504错误
  • 专做正品 网站wordpress侧边栏html
  • 国际公司和跨国公司网站优化分析
  • 在dw里网站页面列表怎么做vs做网站视频教程
  • 东莞软件网站推广南宁比较有好的网站制作公司
  • 2015帝国cms网站什么网站免费做简历模板
  • 网站制作那家便宜建什么网站好
  • 网站seo 优帮云网站标题就一个关键词
  • wordpress二次元极简主题衡阳网站优化
  • 计算机网站建设与管理是什么wordpress字体风格
  • 青岛物流公司网站建设食品 技术支持 东莞网站建设
  • 网易云wordpress代码专门做网站搜索优化的公司
  • 什么网站可以做家禽交易炫酷的网站开发
  • 北京怎么做网站推广客源引流推广
  • 专业电子网站建设图片在线处理工具
  • 医药公司网站建设备案页面升级紧急通知
  • 商业网站和企业网站的区别emlog怎么转换到WordPress
  • 广东网站建设公司有哪些西餐厅网站模板
  • 龙武工会网站怎么做微信开发时间
  • 电子商务网站建设结构分析怎么制作页面边框
  • 便利的广州微网站建设邯郸网站设计公司排名
  • 专业做政法ppt的网站网站优化系统
  • 鲜花网站的网络营销与策划书天津圣辉友联做网站
  • 石家庄中小企业网站制作南京 seo 价格