首页 > 解决方案 > C程序,将参数传递给信号处理函数?

问题描述

我有一个可能的“它无法完成! ”问题,我想从社区中反弹。

我正在使用 C 语言编写的 libIPFIX 程序。在代码的开头,该程序设置了一个 Signal Handler 函数:

void exit_func ( int signo )
{
    if ( verbose_level && signo )
        fprintf( stderr, "\n[%s] got signo %d, bye.\n\n", progname, signo );

    ...clean up global variables...

    exit( 1 );
}

稍后在 main() 中,信号处理程序被连接到更大的代码中:

int main (int argc, char *argv[])
{
    ...

    // signal handler
    signal( SIGKILL, exit_func );
    signal( SIGTERM, exit_func );
    signal( SIGINT,  exit_func );

    ...

    exit(1);
}

漂亮的样板,据我所知。

这是我的问题:我正在使用 malloc() 和链表之类的程序在我的修改版本中跟踪很多额外的数据。当代码检测到信号时,如果可以调用我的 cleanup() 函数来消除内存泄漏,那就太好了exit_func(),等等。我喜欢的是这个:

void exit_func ( int signo, LLNode* myData )
{
    ...same...

    cleanUp( myData );

    exit( 1 );
}

但是阅读sigaction加上这样帖子加上我自己的实验强烈表明没有办法将额外的参数传递给exit_func(). 做我想做的事情的唯一方法就是把我的数据变成一个全局变量。由于其他设计原因,我真的很讨厌这样做。

所以我想我会破产并只是问:有没有办法将论点传递给exit_func()? 提前致谢。

标签: cparameter-passingsignals

解决方案


您不能将参数发送到信号处理程序。需要从处理程序访问的任何内容都需要放入某种全局结构中。


推荐阅读