我一直在嘗試進行系統調用,並想了解set_tid_address如何工作。 bascially從我讀過的是它返回執行的程序或進程的PID。何時系統調用set_tid_address使用?
我已經測試過這與ls,但有一些命令像正常運行時間,頂端等我沒有看到set_tid_address被使用。這是爲什麼?
我一直在嘗試進行系統調用,並想了解set_tid_address如何工作。 bascially從我讀過的是它返回執行的程序或進程的PID。何時系統調用set_tid_address使用?
我已經測試過這與ls,但有一些命令像正常運行時間,頂端等我沒有看到set_tid_address被使用。這是爲什麼?
的clone()
系統調用可以採取CLONE_CHILD_CLEARTID
標誌,在child_tidptr
(另一clone()
參數)的值被清除和相關信號futex的喚醒子線程退出時。這用於實現pthread_join()
(父線程在futex上等待)。
set_tid_address()
允許在初始線程上pthread_join()
。在下面的LKML線程的詳細信息:
[patch] threading fix, tid-2.5.47-A3
[patch] user-vm-unlock-2.5.31-A2
至於爲何一些程序調用set_tid_address()
和別人不一樣,答案很簡單。與libpthread鏈接(直接或間接)的程序調用set_tid_address
。 ls
鏈接到librt
,鏈接到libpthread
,因此它運行NPTL的初始化。
按照Linux Programmer's Manual,set_tid_address用於:
組指針當它被完成線程ID
,則返回調用進程的PID。不幸的是,手冊含糊不清,您何時想要使用此係統調用。
無論如何,你爲什麼認爲這些命令是使用set_tid_address
?
這就是我想知道爲什麼一些使用和一些不... – krisdigitx
@ninjalj ..感謝您的信息很好知道.. – krisdigitx