洛阳seo网站,写网站开发代码,网站建设及发布的流程,大诚设计网站建设目录
进程控制
1.进程创建
(fork前面讲过了)
写时拷贝
进程终止
进程退出场景
退出码
进程终止方法 进程控制
1.进程创建
(fork前面讲过了)
在linux中fork函数时非常重要的函数#xff0c;它从已存在进程中创建一个新进程。新进程为子进程#xff0c;而原进程为父…
目录
进程控制
1.进程创建
(fork前面讲过了)
写时拷贝
进程终止
进程退出场景
退出码
进程终止方法 进程控制
1.进程创建
(fork前面讲过了)
在linux中fork函数时非常重要的函数它从已存在进程中创建一个新进程。新进程为子进程而原进程为父进程
#include pid_t fork(void);
返回值自进程中返回0父进程返回子进程id出错返回-1
进程调用fork当控制转移到内核中的fork代码后内核做 分配新的内存块和内核数据结构给子进程 将父进程部分数据结构内容(pcb 虚拟进程空间 页表 )拷贝至子进程 添加子进程到系统进程列表当中 fork返回开始调度器调度 写时拷贝 写时拷贝:申请内存,发生拷贝,进行数据修改,修改页表的物理内存,恢复权限. 并没有对原数据区进行覆盖 通常父子代码共享父子再不写入时数据也是共享的当任意一方试图写入便以写时拷贝的方式各自一份副本。具体见下图: 父进程创建子进程时 ,子进程继承的页表中权限全是只读的 , 如果子进程尝试修改,会触发系统错误(因为权限都是只读) 触发缺页中断(进行系统检测) 1.子进程如果修改代码段(代码段不能修改),会导致子进程被杀掉 2. 子进程如果修改数据区, 则发生写时拷贝,也恢复了页表中的读写权限. 进程终止
进程退出场景 代码运行完毕结果正确代码运行完毕结果不正确代码异常终止 main函数的返回值(退出码)---返回给父进程或者系统 echo $? 查看最近一个进程的退出码 退出码 0:成功 非零:错误 不同的数字代表不同的错误类型 进程终止方法 main函数return 而其他函数return仅仅只是函数的调用结束,与main函数不同exit( ) 在代码的任意地方表示进程结束(会将缓冲区的内容刷新出来)推荐用_exit( ) 不会将缓冲区的内容刷新 exit( )是上层,_exit( )是下层 exit()_exit() fllush( ) return退出 return是一种更常见的退出进程方法。执行return n等同于执行exit(n),因为调用main的运行时函数会将main的返回值当做 exit的参数。 示例
#include unistd.h
void exit(int status);
int main()
{printf(hello);exit(0);
}运行结果:
[rootlocalhost linux]# ./a.out
hello[rootlocalhost linux]#int main()
{printf(hello);_exit(0);
}运行结果:
[rootlocalhost linux]# ./a.out
[rootlocalhost linux]#