【发布时间】:2017-02-28 06:46:17
【问题描述】:
这是我目前的解决方案:
int is_descendant(task_t* ansc, task_t* targ)
{
task_t* p_tmp;
for(p_tmp = targ ; (p_tmp) && (ansc) && (p_tmp->pid) && (p_tmp->pid != ansc->pid) ; p_tmp = p_tmp->p_pptr) ;
if((!p_tmp) || (!current) || (!p_tmp->pid)) return -ESRCH;
return 0;
}
它有效,但我不确定几件事:
-
如果不检查
p_tmp->pid == 0是否永远迭代,这是否意味着第一个进程的父指针不为NULL? -
是否需要检查
p_tmp或ansc是否为NULL? -
有没有更好的方法来做到这一点? (使用 O(1) 空间计算)
-
宏与函数?
谢谢
【问题讨论】:
-
task_t类型是什么?现代 Linux 内核中没有这种类型。如果您的意思是task_struct对象,那么它有.parent字段表示此任务的父级。 -
我在内核 2.4 上,
task_t定义为typedef struct task_struct task_t