c - C中内核空间遍历祖先的结束标志

标签 c arrays process linux-kernel parent

我正在尝试遍历一个进程的所有祖先,以将它们的信息存储在用户传递的静态数组中,并且我正在使用 NULL 指针结束标志来结束遍历。但是,这似乎不起作用,并且会继续循环,直到用户空间传递的大小数(数组的容量)在所有情况下都匹配 num_filed 数(数组中的元素数),即使我有很运行的进程数量很少。那么,穿越祖宗的终结标志似乎是什么呢?这是我的遍历循环代码:

current_process = current;
int i = 0;
while (current_process != NULL && current_num_filled < size) {
    temp_info_array[i] = get_process_info(current_process);
    ++current_num_filled;
    ++i;
    current_process = current_process->parent;
}

最佳答案

您可以在/include/linux/init_task.h中看到INIT_TASK()宏用于为init进程初始化struct task_struct >。特别是:

    #define INIT_TASK(tsk)  \
    {                                              \
            .state          = 0,                   \
            .stack          = &init_thread_info,   \
                                                   \
            /* ... */                              \
                                                   \
            .real_parent    = &tsk,                \
            .parent         = &tsk,                \
                                                   \
            /* ... */                              \
    }

正如您所见 - init 的 struct task_structparent 成员被设置为指向自身,而不是空指针。

关于c - C中内核空间遍历祖先的结束标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36540595/

相关文章:

c - 在 printf() 格式说明符中使用字段宽度变量

复制 SRC 目录并为所有 c 库函数添加前缀

python - numpy.ndarray.shape 改变维度

java - 为什么我在迭代时得到当前修改异常而不删除?- Java

javascript - 删除 node.js 数组中具有相同开头的项

.net - 捕获标准输出并仍将其显示在控制台窗口中

c - 如何在 C 中使用 strtok 在字符数组中显示文本文件中的 3 行

c - 在 C、Linux 中转储调试步骤

Java Runtime.exec(COMMAND) 在 win2K8 R2 中不起作用

node.js - 在 Node.js 中运行异步进程