进程
知无止境
这个作者很懒,什么都没留下…
展开
-
linux下进程间通信(信号)
一、如何查看linux下支持哪些信号查询命令:kill -l二、linux下各个信号的含义请参考:https://blog.csdn.net/u014470361/article/details/83591513三、linux下常用信号函数3.1、signal函数 #include <signal.h> typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler)原创 2020-09-04 13:39:07 · 157 阅读 · 0 评论 -
linux下进程通信(无名管道和有名管道FIFO)
一、什么是管道管道是从unux继承过来的最早的IPC通讯方式之一,它有如下特点:管道数据的读写是半双工的,即只能从写端写入,从读端读出;管道数据不能重复读取,一旦调用read读取写入管道的数据,这段数据将永久从管道中移除,不能被其它进程获取;管道有点类似于队列,允许用户向其中连续放入多条内容,然后可以逐条取出;二、有名管道和无名管道2.1、无名管道无名管道的存在依赖于创建它的进程,当进程退出后,无名管道的资源也会自动释放;无名管道通信只能用于具有亲缘关系的进程之间的通讯(有名管道没有这原创 2020-09-01 22:48:10 · 247 阅读 · 0 评论 -
linux下进程通信(信号量)
一、信号量的工作原理使用过freertos的应该都知道,信号量其实就是一个计数值,线程发送信号量,实际上是将信号量的计数值加一,线程接收信号量实际上是将信号量的值减一。linux下的信号量其实也是一个计数值,通过semop函数可以将信号量的值进行加一或者减一操作。我们可以想象一个盒子里有n个苹果,每被人拿走一个,盒子里的苹果就会减少一个,当n个苹果全部被拿走之后,我们就只能等待其它人往盒子里放入新的苹果。盒子里的苹果其实就是一个共享资源,当共享资源被耗尽的时候,需要获得共享资源的线程就会挂起并等待,知原创 2020-08-27 16:33:28 · 212 阅读 · 0 评论 -
linux下进程通信(消息队列)
一、消息队列创建和使用流程使用ftok创建一个key使用msgget创建或者打开一个消息队列使用msgsnd发送消息使用msgrcv接收消息使用msgctl获取、修改或者删除消息队列二、消息队列函数2.1、ftok函数函数原型:key_t ftok(const char *pathname, int proj_id);函数功能:使用一个已经存在的文件名和实际只有8为的proj_id创建一个key;2.2、msgget函数函数原型:int msgget(key_t key,原创 2020-08-25 13:53:09 · 255 阅读 · 0 评论 -
linux下IPC标识符和键(ftok函数)
一、标识符和键每个内核中的IPC(InterProcess Communication)结构都用一个非负整数的标识符加以引用。这个标识符的作用和文件描述符类似,但与文件描述符不同的是,标识符每次创建然后又被删除时它的值都会加一,直到达到一个整数的最大值然后从0开始继续循环。标识符是是IPC对象内部的命名,对外不可见,我们在做进程通信时需要创建一个键(key_t),这个键和标识符是绑定的,我们可以使用这个键进行进程间通信;linux下信号量、消息队列和共享存储器在使用时都必须制定一个键值;二、使用原创 2020-08-22 19:49:02 · 490 阅读 · 0 评论 -
linux下wait、waitpid和waitid的用法
1.函数原型#include <sys/types.h>#include <sys/wait.h>pid_t wait(int *wstatus);pid_t waitpid(pid_t pid, int *wstatus, int options);int waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options);2.wait函数wait函数会一直处于阻塞状态,直到有一个子进程退出,并返回退出子进原创 2020-08-21 22:42:01 · 1554 阅读 · 0 评论