进程控制(1. 进程创建, 2. 进程终止, 3. 进程等待 4.进程程序替换)

本文介绍了Linux系统中的进程控制,包括进程创建、进程终止、进程等待和进程程序替换。在进程创建时,会创建一个task_struct结构体,并通过内存映射将磁盘上的可执行程序加载到物理内存。进程程序替换不创建新进程,而是替换现有进程的数据段和代码段,更新堆和栈,但进程ID保持不变,环境变量则继承之前。所有exec系列函数最终都会调用execve系统调用。
摘要由CSDN通过智能技术生成

进程控制:

进程控制包括1. 进程创建, 2. 进程终止, 3. 进程等待 4.进程程序替换

进程创建

 - fork
     	int fork(void) ; 创建子进程
     		返回值:
     			成功: 返回两次
     				大于0: 返回给父进程逻辑
     				等于0: 返回给子进程逻辑
     			失败: 返回 -1
     	子进程拷贝父进程的PCB;
   
 - vfork:
       int vfork(void) 
        	功能:创建子进程的接口
        	创建出来的子进程拷贝部分父进程的PCB, 和父进程共用同一个虚拟地址空间; 如果父子进程同时并行运行 有可能导致调用栈混乱的问题,
        vfork解决方案:
        	 让子进程先运行, 子进程运行完毕后,再让父进程运行
        vfork函数创建子进程已经被淘汰了

进程终止:

1. 含义: 进程终止的含义就是一个进程的退出
2. 场景: 
	2.1 程序跑完了所有的代码, 从main函数退出
    	main函数代码执行完毕, 结果正确
    	main函数代码执行完毕, 结果错误
    2.2 程序没有跑完所有代码, 程序崩溃掉了
  3. 退出的方式:
    3.1 main函数的return返回; 
    3.2 exit函数:(库函数);
    		退出码: 
    			函数在退出的时候,  返回的值; 
    			来源于main函数的返回值, 
    			或者exit的参数; 
    3.3  _exit函数:(系统调用)
        exit函数比_exit函数多两个步骤终止进程: 
            第一步: 执行自定义处理函数
            	int atexit(void(*function)(void));
            		参数是一个函数指针, 可以接收没有返回值, 没有参数的函数地址
            		作用: 调用atexit函数, 将参数传入的函数地址告诉内核. 当程序员需要退出的时候, 才调用传入的函数; 这样的函数叫做回调函数;
            		void func(void)
            		int main(){
   
                		atexit(func);
                		printf("xxx\n"<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值