Linuxプロセス - カーネルからのメッセージ

Linuxプロセス - カーネルからのメッセージ

私は、ユーザー空間のプロセス間通信のためにLinuxに存在するさまざまなIPCメカニズムについて学びました。

カーネルがLinuxでユーザースペースプロセスと通信する方法を尋ねたい(システムコールとは異なり、ユーザースペースは要求を開始します)。 Signalはそのうちの1つかもしれませんか?他のものは何ですか?

ベストアンサー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を一度も試したことがなく、難しいようです。

おすすめ記事