下面这句话是做什么的?如果有人能解释一下这个功能,我将不胜感激。
signal(SIGINT, SIG_DFL);
nhhxz33t1#
SIGINT是中断信号,当你按Ctrl+C时会触发。它的默认行为是终止进程。SIGINT信号可以被处理,这意味着你可以改变默认行为(通过调用sighandler,或设置它SIG_IGN)。现在,一旦动作被改变,你想再次设置它这个信号的默认行为,那么你应该写
SIGINT
sighandler
SIG_IGN
它将再次更改信号的默认行为(即终止进程)。
up9lanfz2#
将SIGINT信号的处理设置为默认值。如果你使用的是 *nix系统,可以试试man signal来得到这样的答案(也许还可以查看“另请参阅”下面列出的一些页面),这样也会告诉你什么是信号。至于默认值是什么-它将是“忽略它”,“终止程序”或“导致程序转储核心”之一。这取决于特定的信号,我不记得SIGINT的默认值,对不起。
man signal
a6b3iqyw3#
您所写的行将中断信号的信号处理程序更改回默认值
void myInterruptHandler (int signum) { printf("You pressed ctrl+c, but I don't care\n"); } int main(){ sighandler_t oldHandler = signal(SIGINT, myInterruptHandler); while(true){ printf("Ctrl + C can't kill me!!\n"); sleep(1000); } //Change back to the old handler signal(SIGINT, oldHandler); //alternatively: signal(SIGINT, SIG_DFL); }
vu8f3i0k4#
它设置SIGINT的默认操作,如下面的手册页所述;Linux信号手册页;
sighandler_t signal(int signum, sighandler_t handler);
signal()函数将信号signum的配置设置为handler,它可以是SIG_IGN、SIG_DFL或程序员定义函数的地址。
4条答案
按热度按时间nhhxz33t1#
SIGINT
是中断信号,当你按Ctrl+C时会触发。它的默认行为是终止进程。SIGINT
信号可以被处理,这意味着你可以改变默认行为(通过调用sighandler
,或设置它SIG_IGN
)。现在,一旦动作被改变,你想再次设置它这个信号的默认行为,那么你应该写
它将再次更改信号的默认行为(即终止进程)。
up9lanfz2#
将SIGINT信号的处理设置为默认值。
如果你使用的是 *nix系统,可以试试
man signal
来得到这样的答案(也许还可以查看“另请参阅”下面列出的一些页面),这样也会告诉你什么是信号。至于默认值是什么-它将是“忽略它”,“终止程序”或“导致程序转储核心”之一。这取决于特定的信号,我不记得SIGINT的默认值,对不起。
a6b3iqyw3#
您所写的行将中断信号的信号处理程序更改回默认值
vu8f3i0k4#
它设置SIGINT的默认操作,如下面的手册页所述;
Linux信号手册页;
signal()函数将信号signum的配置设置为handler,它可以是SIG_IGN、SIG_DFL或程序员定义函数的地址。