内核线程在linux中退出

时间:2010-05-11 10:29:05

标签: multithreading linux-kernel

我在这里问你linux中进程和线程的区别。我知道linux的一个线程只是一个“任务”,它与父进程共享它们共同需要的东西(地址空间和其他重要信息)。我也知道这两个人正在创建调用相同的函数('clone()'),但仍然有一些我缺少的东西:当一个线程退出时真的会发生什么?在linux内核中调用了什么函数? 我知道当进程退出时调用do_exit函数,但是在这里或其他地方应该有一种方法来理解它是一个线程退出还是整个进程。你能解释一下这个东西还是重定向到一些教科书?我试过'理解linux内核',但我对它不满意。 我问这个问题是因为需要在task_struct结构中添加内容,但我需要区分如何管理进程及其子进程的信息。

谢谢。

2 个答案:

答案 0 :(得分:2)

exit()系统调用退出单个线程,exit_group()系统调用退出整个POSIX进程(“线程组”)。

答案 1 :(得分:1)

进程和线程之间的主要区别在于,除了每个其他进程之外,进程在它们自己的虚拟内存空间中运行。这意味着两个进程无法访问彼此的数据。两个进程交互的唯一方法是通过操作系统以某种方式(共享内存部分,信号量,套接字等)。

另一方面,线程都存在于其创建过程中。这意味着线程可以访问同一进程中任何其他线程所具有的所有相同数据(变量,指针,句柄等)。这是主要的区别。

这有一些含义。例如,当进程由于某种原因终止时,所有其线程都随之而来。如果没有任何东西迫使你使用你真正应该使用的操作系统同步功能,那么获取线程中的数据损坏等多处理错误要容易得多。