核心内容摘要
2026年EOR名义雇主服务TOP5精选,助力企业快速实现全球拓展
Linux环境编程第四天笔记进程的语言管道管道是一种特殊的文件管道是Linux中最基础的进程间通信机制分为无名匿名管道和无名管道管道默认是半双工通信方式数据只能在一个方向上流动管道中的数据读取后会从管道中删除不支持随机访问使用lseek。
默认情况下读端无数据时读进程阻塞。
写端管道满时写进程阻塞。
管道一旦创建成功会返回两个文件描述符读端对应fd[0]写端对应fd[1]。
无名管道PIPE无名管道是临时文件随进程的退出而销毁。
没有名字无法使用open()无名管道只能用于具有亲缘关系的进程间通信。
只能用于亲缘进程之间通信半双工工作方式读写端分开写入操作不具有原子性只能一对一通信有名管道FIFO有名管道的文件持久存在于文件系统中需手动删除。
有名字存储于普通文件系统中。
非临时删除需手动删除任何具有相应权限的进程都可以使用open()来获取FIFO的文件描述符和普通文件一样使用统一的read()和write()来读写。
具有写入原子性支持多写者同时写操作pipe()创建无名管道返回值 成功返回 0失败返回 -1并设置 errno#include unistd.h int pipe(int fd[2]);//fd[0]为读端fd[1]为写端mkfifo()用于创建有名管道文件只创建需使用open打开返回值成功返回0失败返回-1#include sys/types.h #include sys/stat.h int mkfifo(const char *pathname, mode_t mode);pathnameFIFO的路径名mode权限模式类似文件权限r (读) 4w (写) 2x (执行) 1(无) 0access()用于检查当前进程对指定文件或目录的访问权限返回值成功返回0失败返回-1#include unistd.h int access(const char *pathname, int mode);mode的可选项值说明F_OK0检查文件是否存在R_OK4检查是否有读权限W_OK2检查是否有写权限X_OK1检查是否有执行权限信号信号是一种特殊的IPC进程间通信大部分信号是异步的进程无法预料什么时候收到信号收到什么信号。
信号共有62个前31个1~31是从UNIX继承下来的被称为非实时信号或不可靠信号后31个34~64是Linux新增的被称为实时信号或可靠信号非实时信号非实时信号优先级相同不排队信号的响应会相互嵌套每个信号都有对应的一个特定的系统事件就绪队列中的非实时信号响应无固定顺序就绪队列中的多个相同的非实时信号仅响应一次其余会被丢弃非实时信号中的 SIGKILL 和 SIGSTOP 这两个信号无法被忽略、无法被捕捉、无法被阻塞只能按照缺省动作进行响应实时信号无具体对应的系统事件实时信号优先级高于非实时信号实时信号的值越大优先级越高就绪队列中的事实信号按优先级从高到低依次响应就绪队列中的多个相同的实时信号全部都会被响应不会被丢弃高优先级的信号会打断正在执行的低优先级信号Linux 对信号的响应有三种方式执行缺省动作比如SIGINT默认终止进程SIGSEGV默认终止并生成 core 文件。
忽略信号通过signal(SIGINT, SIG_IGN)注册表示内核收到该信号后不做任何处理。
自定义响应通过sa_handler或sa_sigaction注册自定义函数内核会在信号到达时调用该函数。
31个非实时信号编号信号名称默认动作说明1SIGHUP终止终端挂起或控制进程终止2SIGINT终止键盘中断CtrlC3SIGQUIT终止核心转储键盘退出Ctrl\4SIGILL终止核心转储非法指令5SIGTRAP终止核心转储调试断点6SIGABRT终止核心转储abort() 产生的信号7SIGBUS终止核心转储总线错误内存访问错误8SIGFPE终止核心转储浮点异常9SIGKILL终止不可捕获/忽略强制终止信号10SIGUSR1终止用户自定义信号111SIGSEGV终止核心转储无效内存引用12SIGUSR2终止用户自定义信号213SIGPIPE终止管道破裂写入无读端的管道14SIGALRM终止定时器超时alarm()15SIGTERM终止优雅终止信号kill默认16SIGSTKFLT终止协处理器栈错误少用17SIGCHLD忽略子进程状态改变18SIGCONT继续继续已停止的进程不可忽略19SIGSTOP停止不可捕获/忽略暂停进程执行20SIGTSTP停止终端停止信号CtrlZ21SIGTTIN停止后台进程读终端22SIGTTOU停止后台进程写终端23SIGURG忽略套接字紧急数据24SIGXCPU终止核心转储超出CPU时间限制25SIGXFSZ终止核心转储超出文件大小限制26SIGVTALRM终止虚拟定时器超时27SIGPROF终止性能分析定时器超时28SIGWINCH忽略窗口大小改变29SIGIO终止I/O就绪同SIGPOLL30SIGPWR终止电源失效31SIGSYS终止核心转储无效系统调用31个实时信号编号信号名称34SIGRTMIN35SIGRTMIN