在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)”。