我有一个使用 Netlink 的 Linux 内核模块,以便与在用户空间中运行的守护进程通信。
在开发阶段,我总是像正常进程一样运行守护进程可执行文件(不调用fork()
),一切正常。
到目前为止,主要行为的开发已经完成,所以我正在实现一个--daemon
调用该fork()
方法的参数(也setsid()
如链接http://www.thegeekstuff.com/2012/02/c-daemon-process/中所述) ) 就在继续正常进程之前。
下一步是守护进程在初始化 Netlink 套接字后调用 Linux 内核模块,这个是保存守护进程的 PID 以便推送消息。Linux 内核守护进程正确接收来自守护进程的消息,但无法使用netlink_unicast()
返回 errno -111(连接被拒绝)发送消息。
我检查了 Linux 内核模块收到的 PID,它与被分叉后的守护进程相同,所以看起来是正确的。
你知道为什么我的守护进程在分叉时不再能够recvmsg()
从我的 Linux 内核模块接收消息(使用该方法)吗?