如何在C中控制程序终止

时间:2018-04-02 08:11:54

标签: c signals

当我向服务器发送SIGINT(ctrl-c)时,名为server.c的程序终止另一个名为client.c的程序。我的问题是:我如何控制客户的终止?我希望它在退出之前打印出来。

我试过捕获以下信号,但没有一个被抓住:

sigaction(SIGINT, &newact, NULL);

sigaction(SIGQUIT, &newact, NULL);

sigaction(SIGTERM, &newact, NULL);
sigaction(SIGTSTP, &newact, NULL);

是否还有其他可能导致程序终止的信号?

1 个答案:

答案 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()

之后的清理代码