想象一下,我正在开发一种系统调用,它接收pid_t pid
并返回文件描述符fd
。这个系统调用器要做的是监视pid为pid
的进程,这样,只要其他进程调用fork()
,就会有东西写入文件描述符fd
。为此,我在struct task_struct
中创建了一个名为files_to_signal_on_fork
的新列表字段。因此,我的系统调用会创建一个新的struct file *file
,获取与struct task_struct *task
相关的pid
,将file
添加到task
' s files_to_signal_on_fork
列出并返回表示file
的文件描述符,以便我可以使用poll
跟踪其他进程调用fork()
的时间。我向do_fork
添加了几行代码,因此,当它被调用时,它会向存储在进程中的所有struct file *
结构写入内容。 files_to_signal_on_fork
列表。
所以,正在通过一个过程' struct file *
结构给另一个进程一个好主意?有没有办法在struct file *
尝试写一些内容之前检查do_fork
的所有者是否还活着?
答案 0 :(得分:1)
文件是引用计数的。
删除最后一个引用时,您必须从任务列表中删除struct file
(f_op->release
)。