开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第15天,点击查看活动详情
信号
信号是一种比较复杂的通信方式,信号产生的条件:按键、硬件异常、进程调用kill函数将信号发送给另一个进程、用户调用kill命令将信号发送给其他进程,传递的消息比较少用于通知接收进程某个时间已经发生。
不能跨局域网,而且信息量少。
消息队列
消息队列是消息的链表,存放在内核中并由消息队列标识符标识,消息队列克服了信号传递信息少,管道只能承载无格式字节流以及缓冲区大小受限等特点。 不建议使用,现在很多成熟的消息队列。
共享内存
共享存储是最高效的IPC机制,因为不涉及进程之间的任何数据传输,但是必须辅助其他方式(比如信号量)来同步进程对共享内存的访问,否则会产生竞态条件(race condition)。共享内存适合实现进程间共享的、非常庞大的、读写操作频率很高的数据(配合信号量使用);这种方式通常适用于多进程间通信 。无须复制,快捷、信息量大是其优点。
套接字 socket
套接字可用于不同及其间的进程通信。可以跨局域网适应分布式的需求。首选socket来实现进程间通信。
常见信号
显示所有的信号:kill -l
| signum | 信号 | 处理方式 | 来源 |
|---|---|---|---|
| 2 | SIGINT | terminate | 来自键盘中断 ctr+C |
| 6 | SIGABRT | terminate | assert 触发 |
| 11 | SIGSEGV | dump | 无效的内存引用 |
| 14 | SIGALRM | terminate | 定时器信号 |
| 9 | SIGKILL | terminate | 强迫进程终止 kill-9 |
| 15 | SIGTERM | terminate | 进程终止(不带参数时Kill 默认发送的信号) |
| 19 | SIGSTOP | stop | 停止进程执行 |
| 13 | SIGPIPE | terminate | 向已经关闭的管道写数据 |
| 17 | SIGCHLD | SIG_IGN | 子进程死亡 |