当我向服务器发送SIGINT(ctrl-c)时,名为server.c
的程序终止另一个名为client.c
的程序。我的问题是:我如何控制客户的终止?我希望它在退出之前打印出来。
我试过捕获以下信号,但没有一个被抓住:
sigaction(SIGINT, &newact, NULL);
sigaction(SIGQUIT, &newact, NULL);
sigaction(SIGTERM, &newact, NULL);
sigaction(SIGTSTP, &newact, NULL);
是否还有其他可能导致程序终止的信号?
答案 0 :(得分:0)
使用GCC C系列编译器,我们可以标记一些在main()之前和之后执行的函数。因此,一些启动代码可以在main()启动之前执行,并且一些清理代码可以在main()结束之后执行。
#include<stdio.h>
/* Apply the constructor attribute to myStartupFun() so that it
is executed before main() */
void myStartupFun (void) __attribute__ ((constructor));
/* Apply the destructor attribute to myCleanupFun() so that it
is executed after main() */
void myCleanupFun (void) __attribute__ ((destructor));
/* implementation of myStartupFun */
void myStartupFun (void)
{
printf ("startup code before main()\n");
}
/* implementation of myCleanupFun */
void myCleanupFun (void)
{
printf ("cleanup code after main()\n");
}
int main (void)
{
printf ("hello\n");
return 0;
}
main()之前的启动代码 你好 main()
之后的清理代码