首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓: tgid task_struct val

安卓: tgid task_struct val
EN

Stack Overflow用户
提问于 2011-05-14 03:40:48
回答 1查看 532关注 0票数 0

我有一个守护进程,我不断地启动它,并在循环中执行“kill-9”,以便对特定用例进行压力测试。这个守护进程加载一个共享库,然后打开一个fd。( fd的打开/关闭在内核中处理的另一个共享库代码中)。我观察到在内核库中执行清理操作时,它会在清理之前检查来自task_structs (tgid)的PID值。现在我的观察:我有时看到,当守护进程被杀死时,我没有看到相关的tgid值,相反,我看到一个奇怪的进程ID值,它是“绑定器进程”。因此,我在内核代码中的清理操作不会对被'kill -9‘杀死的那个进程ID生效。

任何人都知道为什么current->tgid值是活页夹进程的值,而不是被终止的守护进程的值。请注意,我的守护进程确实链接到'libbinder‘。我不确定这是否能起到作用。如果我从我的守护进程中删除到'libbinder‘及其相关代码的链接,一切看起来都很正常

有什么建议/想法吗?

EN

回答 1

Stack Overflow用户

发布于 2011-05-17 13:13:50

如果您的用户空间进程打开一个文件,然后派生另一个进程,则打开的文件将在派生的进程中复制(该libbinder很可能派生出另一个进程)。

内核中file_operations结构的close方法只会在最后一个文件引用被put时调用。如果两个进程几乎同时死掉,那么最终调用close方法的进程将是第二个死掉的进程。

您的内核代码不应该依赖于tgid。它应该将清理操作所需的数据附加到struct file,而不是附加到task_struct

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5996943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档