1

ユーザー空間で実行されているデーモン プロセスと通信するために、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 から(メソッドを使用して) メッセージを受信できなくなる理由を知っていますか?

4

1 に答える 1

0

@artless-noise は正しかったです。umask(0) を呼び出すのを忘れていました。

于 2013-04-09T18:18:11.170 に答える