在Linux上執行“man raise”,即可看到兩者的區別:
|
函數raise |
函數kill |
函數性質 |
LIBC庫函數, raise基於系統調用kill或tgkill(如果內核支持)實現 |
系統調用,不是LIBC庫函數 |
單線程程序 |
raise(sig)效果等同kill(getpid(), sig) |
|
多線程程序 |
raise(sig)效果等同pthread_kill(pthread_self(), sig) |
|
在多線程程序中,進程給自己發SIGTERM信號退出,應當調用“kill(getpid(), SIGTERM)”,而不是“raise(SIGTERM)”。