ユーザー空間で実行されているデーモン プロセスと通信するために、Netlink を使用する Linux カーネル モジュールがあります。
開発段階では、デーモン実行可能ファイルを通常のプロセスのように (を呼び出さずにfork()
) 常に実行しており、すべて正常に動作していました。
現在、主な動作の開発は終了しているので--daemon
、メソッドを呼び出す引数を実装していますfork()
(またsetsid()
、リンクhttp://www.thegeekstuff.com/2012/02/c-daemon-process/で説明されているように) ) 通常のプロセスを続行する直前に。
次のステップは、Netlink ソケットを初期化した後のデーモンが Linux カーネル モジュールを呼び出し、これがメッセージをプッシュするためにデーモンの PID を保存することです。Linux カーネル デーモンは、デーモン プロセスからメッセージを正しく受信しますが、netlink_unicast()
エラー番号 -111 (接続が拒否されました) を返すメッセージを使用してメッセージを送信できません。
Linux カーネル モジュールが受け取った PID を確認しましたが、フォークされた後のデーモンと同じで、正しいように見えます。
recvmsg()
デーモン プロセスが fork されると、Linux Kernel Module から(メソッドを使用して) メッセージを受信できなくなる理由を知っていますか?