我一直在尝试进行系统调用,并希望了解set_tid_address的工作原理。基本上我从我所读到的是它返回执行的程序或进程的pid。
我用ls测试了这个,但是有一些命令,如正常运行时间,顶部等,我没有看到使用set_tid_address。那是为什么?
答案 0 :(得分:3)
clone()
系统调用可以采用CLONE_CHILD_CLEARTID
标志,child_tidptr
(另一个clone()
参数)的值被清除,并且关联的互斥信号在唤醒时发出警报子线程退出。这用于实现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
与{{1}}相关联,因此它会运行NPTL的初始化。
答案 1 :(得分:0)
根据Linux Programmer's Manual,set_tid_address用于:
设置指向线程ID的指针
完成后,它返回调用进程的PID。不幸的是,手册对于你何时想要使用这个系统调用很模糊。
在任何情况下,为什么您认为这些命令正在使用set_tid_address
?