我正在尝试在用户空间中创建一个设置进程关联性的应用程序。我希望每次内核生成新的pid / tid时立即触发该程序。我试图从内核中的do_fork()方法写入/ proc下的文件节点,但我觉得它可能有太多的开销。
是否有人知道在生成新进程后立即检测新进程的替代方法?
如果要监视do_fork()是否可行,那么通过系统调用回调用户空间程序会比使用fs节点进行通信更快吗?
答案 0 :(得分:6)
使用带有NETLINK_CONNECTOR的套接字。内核将告诉您有关进程事件的信息,包括fork()和exec()。您必须在内核中启用CONFIG_CONNECTOR和CONFIG_PROC_EVENTS。
以下是一个相关问题,详细信息如下:
Detect launching of programs on Linux platform
有关完整套接字NETLINK_CONNECTOR示例,请参阅:
http://bewareofgeek.livejournal.com/2945.html
顺便说一下,Inotify并不起作用。它不适用于/ proc /检测新进程:
答案 1 :(得分:5)
Forkstat是一个记录进程fork()[等等]的程序 安装它:
$ sudo apt-get install forkstat
用它来记录“fork”事件:
$ forkstat -e fork