2010-05-11 105 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

進程和線程之間的主要區別在於,除了每個其他進程之外,進程都在自己的虛擬內存空間中運行。這意味着兩個進程無法訪問彼此的數據。兩個進程交互的唯一途徑是通過操作系統以某種方式(共享內存段,信號量,套接字等)。

線程另一方面都存在於其創建過程中。這意味着線程可以訪問同一進程中任何其他線程所具有的所有相同數據(變量,指針,句柄等)。這是主要的區別。

這有一些暗示。例如,當進程由於某種原因而終止時,其所有線程都會使用全部。在線程中出現多處理錯誤,比如破壞數據也容易得多,因爲沒有什麼東西會迫使你使用你真正應該使用的操作系統同步功能。