Linux 프로세스 - 커널의 메시지

Linux 프로세스 - 커널의 메시지

나는 사용자 공간 프로세스 간 통신을 위해 Linux에 존재하는 다양한 IPC 메커니즘에 대해 배웠습니다.

커널이 Linux에서 사용자 공간 프로세스와 통신하는 방법이 무엇인지 묻고 싶습니다(시스템 호출과 달리 사용자 공간이 요청을 시작함). Signal이 그 중 하나일 수 있나요? 다른 것들은 무엇입니까?

답변1

어떤 경우에는 신호가 일반적인 커널-프로세스 통신입니다. 물론 적절한 UID를 가진 모든 프로세스를 사용하여 kill()신호를 보낼 수 있지만 신호는 SIGCHLD거의 SIGWINCH항상 커널에서 나옵니다.

signalfd()Linux의 경우 시스템 호출을 볼 수 있습니다 . 일반적인 신호 처리는 "업콜"을 통해 이루어지지만 signalfd()프로세스에 따라 신호를 수신하는 다양한 방법이 제공됩니다.

시스템 호출의 반환 값은 커널과 사용자 간의 프로세스 통신으로 생각할 수 있습니다. 이는 큰 차이를 가져오지만 fork()단지 예일 뿐입니다. 상위 프로세스는 0이 아닌 프로세스 ID(오류 시 -1)를 반환하고 하위 프로세스는 0을 반환합니다.

poll()시스템 호출에는 select()커널이 사용 가능한 이벤트/상태 변경 사항이 있는 파일 설명자를 나타내기 위해 값을 설정하는 매개 변수가 있습니다. 이는 "inout" 형식 매개변수와 비슷하지만 커널이 값을 설정합니다.

API를 사용하면 inotify특수 파일 설명자를 통해 커널과 프로세스 간 통신이 가능합니다.read()

매뉴얼 페이지를 올바르게 읽으면 POSIX 비동기 I/O 시스템에는 I/O가 발생할 때 스레드를 시작하는 것을 포함하여 사용자 프로세스와 통신하는 여러 가지 방법이 있는 것 같습니다. 나는 POSIX 비동기 I/O를 한번도 해본 적이 없으며 까다로워 보입니다.

관련 정보