2015-10-19 96 views
0

我创建了信号。其中一人打印“1”20次。另一个打印“2”20次。我希望这些信号依次打印他们的数字:1,2,1,2 ...但程序只打印“1”。有人可以帮我解决这个问题吗?如何发送信号?

+0

那么,你的循环和你的信号处理程序之间有什么联系? – Kotshi

+1

我的意思是,你使用sigset来设置你什么都不做的信号处理程序,然后你使用main函数中的printf()。这些与你正在捕捉的信号无关...... – Kotshi

+0

sigset()将函数定义为信号处理函数。在使用'sigset(SIGTERM,handler)之后;'发送给你程序的每个SIGTERM将执行'handler()'而不是杀死你的程序。 – Kotshi

回答

2

运行此代码并查看将SIGUSR1或SIGUSR2发送到打印的PID时的内容。

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

void handler1(int signal) 
{ 
    printf("Foo\n"); 
} 

void handler2(int signal) 
{ 
    printf("Bar\n"); 
} 

int main() 
{ 
    printf("PID: %d\n", getpid()); 
    sigset(SIGUSR1,handler1); 
    sigset(SIGUSR2,handler2); 
    while (1); 
    return(0); 
} 
+0

@Dean是的,谷歌会告诉你数以百计的方式来做到这一点。 – Kotshi

+0

当然它处于一个无限循环中,('while(1);')。我的意思是:“尝试从另一个终端发送信号” – Kotshi

+0

只要你想杀死程序,就使用** ctrl + c **。 – Kotshi