信号处理程序与sighup

时间:2013-07-18 21:19:12

标签: c signals handler

#include <stdio.h>
#include <stdlib.h>
#include <sys/signal.h>
#include <string.h>

void handler (int sig);
int count;

int main() {

    struct sigaction act;
    memset (&act, 0, sizeof (act));


    act.sa_handler = handler;
    if (sigaction (SIGHUP, &act, NULL) < 0) {
        perror ("sigaction");
        exit (-1);
    }

    int count = 0;
    while(1) {
        sleep(1);
        count++;
    }

}

void handler (int signal_number){
        printf ("count is %d\n", count);
}

我认为我这样做是正确的,我如何在命令行中调用sighup?它需要调用sighup来打印我的计数。

3 个答案:

答案 0 :(得分:4)

从技术上讲,在信号处理程序中进行I / O是不安全的,最好设置一个标志,注意它,然后根据标志进行打印。 在posix系统上,你应该能够从命令行“杀死-HUP”来发送信号。

答案 1 :(得分:2)

您可以使用kill -SIGHUP <pid>,其中<pid>是您代码的进程ID。

答案 2 :(得分:1)

在控制台中尝试:

ps -a

宣读你的节目的pid

kill -s HUP target_pid

Here you have一个带有信号列表的kill手册页。

编辑:更简单的是你可以使用killall:

killall -HUP nameofyourbinary