C程序中的raise和kill两个函数有何不同?
在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)”。