Linux进程的创建与管理
https://blog.csdn.net/qq_38410730/article/details/81193118
https://www.cnblogs.com/gwyy/p/8611398.html
进程间通信:
https://www.cnblogs.com/zgq0/p/8780893.html
匿名管道(包括popen的使用)、
FIFO命名管道、
当 open 一个FIFO时,是否设置非阻塞标志(
O_NONBLOCK
)的区别:
若没有指定
O_NONBLOCK
(默认),只读 open 要阻塞到某个其他进程为写而打开此 FIFO。类似的,只写 open 要阻塞到某个其他进程为读而打开它。若指定了
O_NONBLOCK
,则只读 open 立即返回。而只写 open 将出错返回 -1 如果没有进程已经为读而打开该 FIFO,其errno置ENXIO。
消息队列、
可以利用命令ipcs -q查看消息队列;
消息队列的创建是在程序之外的,换而言之,就是说消息队列创建完成之后并不会因为程序结束被释放空间。那么,我们可以用ipcrm -q +msqid 命令来删除消息队列;或用msgctrl remove掉消息队列;
信号量(同步机制,不算是通信)、
共享内存、
消息队列、信号量和共享内存都是内核提供的,三者使用方式相似,都是ftok();**get();发;收;**ctrl();
1.管道:速度慢,容量有限,只有父子进程能通讯
2.FIFO:任何进程间都能通讯,但速度慢
3.消息队列:容量受到系统限制,且要注意第一次读的时候,要考虑上一次没有读完数据的问题
4.信号量:不能传递复杂消息,只能用来同步
5.共享内存区:能够很容易控制容量,速度快,但要保持同步,比如一个进程在写的时候,另一个进程要注意读写的问题,相当于线程中的线程安全,当然,共享内存区同样可以用作线程间通讯,不过没这个必要,线程间本来就已经共享了同一进程内的一块内存
流管道、
管道是半双工的, 流管道是双工的,用的s_pipe()
socket
见socket相关的内容