exit()无法终止进程吗?

Man*_*dar 11 c linux process exit

我在我的程序中注册了一个信号处理程序.收到不需要的信号(SIGABRT)后,我在信号处理程序中调用'exit(-1)'退出进程.但正如在几个ocassions中注意到的那样,它调用exit()但是无法终止进程.

该问题是随机生成的,我强烈怀疑执行exit().

是否存在exit()无法终止进程的任何原因或情况.

谢谢.

rod*_*igo 15

你是exit()从信号处理程序调用的吗?

man 7 signal,部分异步信号安全功能中,您可以看到从信号处理程序调用时保证可以工作的所有功能:

信号处理函数必须非常小心,因为其他地方的处理可能在程序执行中的某个任意点处中断.POSIX具有"安全功能"的概念.如果信号中断了不安全函数的执行,并且处理程序调用了不安全函数,则程序的行为是未定义的.

POSIX.1-2004(也称为POSIX.1-2001技术勘误2)要求实现以保证在信号处理程序内可以安全地调用以下函数:

在那里,你可以看到的功能_Exit(),_exit()abort(),但不显着exit().所以你不应该从信号处理程序中调用它.

令人讨厌的是,即使你从一个信号处理程序(printf()任何?)调用一个不安全的函数,它只会在大部分时间工作......但并非总是如此.