3
#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);
}

I assume i am doing this right, how would I go about call sighup within the command line? It needs to call sighup to print out my count.

4

3 回答 3

4

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

于 2013-07-18T21:21:53.513 回答
2

您可以使用kill -SIGHUP <pid><pid>您的代码的进程 ID 在哪里。

于 2013-07-18T21:20:49.053 回答
1

在控制台中试试这个:

ps -a

读出程序的 pid

kill -s HUP target_pid

在这里,您有一个带有信号列表的 kill 手册页。

编辑:甚至更简单,您可以使用 killall:

killall -HUP nameofyourbinary
于 2013-07-18T21:21:34.990 回答