错误编译进程 SIGALRM kill

Posted

技术标签:

【中文标题】错误编译进程 SIGALRM kill【英文标题】:Error compiling process SIGALRM kill 【发布时间】:2012-04-23 01:19:34 【问题描述】:

这个程序会创建一个子进程,子进程会等待一个ALARM信号,当这个信号在3秒后到达时,f函数会抓取父进程ID,并发送一个SIGINT信号杀死它,所以孩子会在 3 秒后杀死父母

#include <stdio.h>
    #include <unistd.h>
    #include <signal.h>
    #include <string.h>

    void f(int sig)
    
        kill(getppid(),SIGINT);
    

    main()
    
        int f=fork();
        if(f==0)
        
            signal(SIGALRM,f);
            alarm(3);
        
        else
        
            pause();
        
    

我收到了这个错误:

test13.c: In function ‘main’:
test13.c:16:3: warning: passing argument 2 of ‘signal’ makes pointer from integer without a cast
/usr/include/signal.h:101:23: note: expected ‘__sighandler_t’ but argument is of type ‘int’

【问题讨论】:

【参考方案1】:

不要再用你的变量踩f了。

【讨论】:

尝试重命名变量,这样就不会有多个名为f的东西@【参考方案2】:

你已经reused the name f to refer to different things depending upon scope。

【讨论】:

以上是关于错误编译进程 SIGALRM kill的主要内容,如果未能解决你的问题,请参考以下文章

进程间通信的几个知识点[C]

Linux:进程管理

LinuxC——5.信号

linux信号

信号

主进程被kill或者错误退出,子线程还在跑怎么处理