2010-05-11 79 views
1

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

谢谢。

回答

2

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

+0

好吧,但我一直在寻找关于linux内核如何处理来自内核端的线程终止(退出)的信息。特别是,我对查找内核中函数的代码感兴趣,以便详细了解它的功能,以便我可以添加代码......您说的是内核的do_exit函数只适用于线?? – Raffo 2010-05-11 16:58:09

+0

@Raffo:是的,确切的。 – caf 2010-05-11 22:09:34

1

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

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

这有一些暗示。例如,当进程由于某种原因而终止时,其所有线程都会使用全部。在线程中出现多处理错误,比如破坏数据也容易得多,因为没有什么东西会迫使你使用你真正应该使用的操作系统同步功能。