Linux进程-来自内核的消息

Linux进程-来自内核的消息

我一直在学习 Linux 中存在的不同 IPC 机制,用于用户空间进程之间的通信。

我想问Linux中内核与用户空间进程通信的方式有哪些(与系统调用相反,用户空间发起请求)?信号可以是其中之一吗?其他的是什么?

答案1

在某些情况下,信号是典型的内核到进程的通信。当然,任何具有适当 UID 的进程都可以用来kill()发送信号,但类似SIGCHLDSIGWINCH几乎总是来自内核的信号。

具体到Linux,可以看看signalfd()系统调用。通常的信号处理是通过“上行调用”,但signalfd()为进程提供了不同的接收信号的方式。

系统调用的返回值可以被认为是内核到用户进程的通信。这有很大差异,但fork()只是一个例子。父进程返回一个非零进程 ID(错误时为 -1),子进程返回零。

poll()和系统调用select()具有参数,其中内核在参数中设置值以指示哪些文件描述符具有可用的事件/状态更改。这更像是一个“inout”形式参数,但内核确实设置了值。

API允许通过特殊文件描述符进行inotify内核到进程的通信。read()

如果我正确阅读了手册页,POSIX 异步 I/O 系统似乎有多种方式与用户进程通信,包括在发生 I/O 时启动线程。我从来没有做过 POSIX 异步 I/O,它看起来很棘手。

相关内容