进程学习(二)

本文介绍了进程控制的相关概念,包括exec函数族的使用,孤儿与僵尸进程的处理,重点讲解了wait与waitpid函数在回收子进程中的作用。此外,还探讨了进程间通信的三种主要方式:管道(PIPE)、FIFO和共享内存(MMP)。对于每种IPC机制,都阐述了其特点和应用场景。
摘要由CSDN通过智能技术生成

1.exec函数族

调用exec后用户空间代码和数据替换成新的程序,从新的程序历程开始执行,但是并不创建新的进程,进程PID不变,换核不换壳

execlp、execl

只有调用失败才会返回-1,调用成功就结束了不会返回

2.回收子进程

孤儿进程:父进程先于子进程结束,子进程的父进程变为init进程,init进程领养孤儿进程

僵尸进程:进程终止,父进程尚未回收,子进程残留资源(PCB)放于内核中,变成僵尸进程

僵尸进程不可以用KILL杀死,因为KILL命令是用来终止进程的,而僵尸进程已经结束了

wait 函数:一次wait/waitpid只能清理一个子进程,清理多个要使用循环

1)阻塞等待子进程

2)回收子进程残留资源

3)获取子进程结束状态(残留原因)

waitpid函数

可以指定PID进程进行清理,可以不阻塞

WNOHANG 变成非阻塞,为了确保杀死子进程,可以采用轮询

返回0:参数三为WNOHANG ,且子进程在运行

3.进程间通信IPC

1)管道PIPE:内核使用环形队列

管道自己读不能写;

数据一旦被读走,就不再管道内不可以重复读取

由于管道采用半双工通信方式,因此数据只能在一个方向上流动

只能在有共公祖先的进程之间通信

2)FIFO(命名管道)

通过FIFO不相关进程也可以交换数据

3)MMP(共享内存)

mmap函数

成功返回创建映射的首地址,失败返回MAP_FAILED宏

MAP_SHARED时创建映射区的权限要小于等于文件的权限,MAP_PRIVATE只要能建立映射区,就无所谓了

创建映射区的过程隐含对文件进行一次读操作

offset必须是4K整数倍(偏移位置),内核里的MMU建立的,它一页为4K

文件描述符先关闭,对MMAP没有影响

MAP_SHARED父子进程共享映射区

MAP_PRIVATE父子进程独占映射区

父子进程共享:1.打开的文件 2.MAP_SHARED共享的映射区

匿名映射:文件好像没有用,不需要创建文件

MAP_ANONYMOUS|MAP_SHARED,fd的位置写-1,大小还是需要按需求填写

MMAP无血缘关系进程通信

对同一个文件做两次映射,通过映射区通信

//也可以对同一个文件进行通信

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值