2011-03-21 133 views
2

我正在嘗試編寫一個程序,它使用tgkill將信號發送到特定的線程,但是每當我使用gcc編譯它時,我都會收到一個關於'tgkill 」。我試着用-lpthread編譯,但沒有幫助。我使用Google搜索並且不能提供任何答案。我如何得到它?無法編譯調用tgkill的程序

+0

爲什麼現在要使用舊版的linux-libc-only函數?因爲您提到了pthread庫,所以POSIX線程是要走的路,而且您可能會對它有所支持。但是,如果你的代碼大部分已經完成,請嘗試通過syscall(2)調用它。 – MattBianco 2011-03-21 12:59:26

回答

4

tgkill()手冊頁:

glibc不提供 這些系統調用的封裝。使用系統調用(2)致電 。

+1

謝謝,我閱讀了聯機幫助頁,但沒有閱讀整個事情......經驗教訓。 – 2011-03-22 05:38:37

3

正如在另一個答案中指出的,glibc不提供tkill()tgkill()的包裝。您可以使用pthread_kill()

+0

pthread_kill不是tgkill的直接替換,特別是,pthread_kill使用的pthread ID與tgkill使用的輕量級進程id不同。使用系統調用(SYS_tgkill) – 2017-02-01 04:25:38

3

你可能想用這樣的東西代替。
tgid = getpid();
tid = gettid();
syscall(SYS_tgkill,tgid,tid,signalname));

+0

gettid()不幸的是沒有包裝 – spiffman 2015-03-18 05:24:59