摘要:
共享内存是最高效的IPC机制,因为它不涉及进程之间的任何数据传输。这种高效带来的问题是,我们必须用其他手段来同步进程对共享内存的访问,否则会产生竞态条件。所以,共享内存通常和其他进程间通信方式一起使用。 linux 共享内存有四个系统调用:shmget, shmat, shmdt, shmctl s 阅读全文
摘要:
ipcs 命令,可以看到当前系统上的共享资源实例 ipcrm 命令,可以删除一个共享资源实例 linux 操作信号量的函数有三个:semget, semop, semctl semget 声明为: key 是一个键值,用来标识一个全局唯一的信号量集。要通过信号量通信的进程需要使用相同的键值来获取该信 阅读全文
摘要:
epoll 是 linux 特有的 I/O 复用函数。它是把用户关心的文件描述符事件放在内核的一个事件列表中,故而,无须像select和poll一样每次调用都重复传入文件描述符或事件集。但是, epoll 需要一个额外的文件描述符,来唯一标识内核中的这个事件表。这个文件描述符由 epoll_crea 阅读全文
摘要:
相对于select来说,poll 也是在指定时间内论询一定数量的文件描述符,来测试其中是否有就绪的,不过,poll 提供了一个易用的方法,来实现 i/o 复用。 声明如下: 其中,struct pollfd 定义为: fd 为文件描述符,events 告诉poll 监听fd 上哪些事件,它是一系列事 阅读全文
摘要:
select 是linux i/o 复用技术之一 man 2 select nfds是监听文件描述符的总数。它通常被设置为select监听的所有文件描述符的最大值加1. readfds, writefds, exceptfds指向可读、可写、异常等事件对应的文件描述符集合。应用程序调用select时 阅读全文
摘要:
相对于无名管道来说,socketpair也是使用在亲缘进程之间,不过它提供了能够全双工通信的通道 man socketpair: 该sv保存的两个文件描述符,能写也能读 阅读全文
摘要:
特点 无名管道是半双工的,也就是说,一个管道要么只能读,要么只能写 只能在有共同祖先的进程间使用(父子进程、兄弟进程、子孙进程等) fork或者execve调用创建的子进程,继承了父进程的文件描述符 通过man 2 pipe查看 打开两个文件描述符,保存在pipefd中,其中pipefd[0]为读端 阅读全文
摘要:
sigaction函数是设置信号处理的接口。比signal函数更健壮 signum指除了SIGKILL 和 SIGSTOP之外,要捕获的信号。struct sigaction *act是要安装的信号。结构题定义为: 其中,sa_handler为信号的处理函数。sa_mask设置在进程原有信号掩码基础 阅读全文
摘要:
使用kill -l 命令,可看到linux支持的信号列表: 其中,编号1-31的信号为传统unix支持的信号,是不可靠信号(非实时),编号32-63信号是后来扩充的,为可靠信号(实时信号)。不可靠信号和可靠信号区别是,前者不支持排队,可能会造成信号丢失。后者不会。 1-31 信号释义: 1) SIG 阅读全文
摘要:
信号是由用户、系统、进程发给目标进程的信息,以通知目标进程某个状态的改变或者系统异常。linux信号产生条件为: 在终端输入字符,比如ctrl+z 系统异常 系统状态变化。比如 alarm 定时器到期产生SIGALRM信号 运行kill或者调用kill函数 查看Linux支持的信号命令:kill - 阅读全文