gpt4 book ai didi

c - Linux 是否为僵尸进程保留内核堆栈?

转载 作者:行者123 更新时间:2023-12-03 09:46:16 26 4
gpt4 key购买 nike

我在一本教科书中了解到,当进程变成僵尸时,Linux 会保留进程描述符,直到 future 的父进程验证退出状态。我知道进程描述符有两个结构:task_struct在平板中,和 thread_info在内核堆栈中(忘记 x86)。
我正在阅读 do_exit()源代码的一部分,但我不太清楚内核堆栈的释放位置。我可以找到 exit_notify()将进程的状态更改为僵尸。其余的代码看起来主要是清理锁和其他东西,直到 schedule() .
我似乎找不到释放内核堆栈的部分?还是我不明白内核堆栈是如何工作的?
或者也许 thread_info根本不考虑保留并且在变成僵尸之前已经与内核堆栈一起丢弃了?
到底发生了什么?

最佳答案

经过一番挖掘,我想我终于找到了......

void free_task(struct task_struct *tsk)
{
prop_local_destroy_single(&tsk->dirties);
account_kernel_stack(tsk->stack, -1);
free_thread_info(tsk->stack);
rt_mutex_debug_task_free(tsk);
ftrace_graph_exit_task(tsk);
free_task_struct(tsk);
}
在 parent 验证僵尸时, put_task_struct()->__put_task_struct()->free_task()确实释放了内核堆栈。
所以,答案是肯定的。僵尸进程确实保留了内核堆栈。

关于c - Linux 是否为僵尸进程保留内核堆栈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65652882/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com