【发布时间】:2012-12-26 10:29:09
【问题描述】:
这是我的第一个程序....ctrlcsignal.c
enter code here
#include<stdio.h>
#include<unistd.h>
#include<signal.h>
void signal_handler(int sigNo)
{
//if Ctrl+c signal
if(sigNo==SIGINT){
printf("value of SIGINT:-%d\t",SIGINT);
printf("received SIGINT\n");
}
// if some other signal , but this part wont get executed
// as the signal_handler function is registered with SIGINT only
else
{
printf("Some other signal found");
printf("value of other signal:-%d",sigNo);
}
}
int main(void)
{
//registering the signal handler function with a signal
kill(19574,SIGUSR1);
if(signal(SIGINT,signal_handler)==SIG_ERR)
{
printf("\n can't catch SIGINT\n");
}
while(1) //infinite loop
sleep(1); // 1s ,so that the CPU is not busy
return 0;
}
这是我的第二个程序....userdefinedsignals.c
enter code here
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
void signal_handler(int sigNo)
{
printf("function entered...");
// check for userdefined Signal SIGUSR1
if (sigNo == SIGUSR1)
{
printf("received SIGUSR1 with value :- %d",SIGUSR1);
}
//checking for KILL Signal
else if (sigNo == SIGKILL)
{
printf("received SIGKILL with value :- %d",SIGKILL);
}
//checking for STOP Signal
else if (sigNo == SIGSTOP)
{
printf("received SIGSTOP with value :- %d",SIGSTOP);
}
// if some other signal , but this part wont get executed
// as the signal_handler function is registered with SIGINT only
else
{
printf("Some other signal found");
printf("value of other signal:-%d",sigNo);
}
}
int main(void)
{
int pid_t;
printf("process id is %d",getpid());
//registering the signal handler function with a signal
if(signal(SIGUSR1,signal_handler) == SIG_ERR)
{
printf("\n can't catch SIGSIGUSR1\n");
}
if(signal(SIGKILL,signal_handler)==SIG_ERR)
{
printf("\n can't catch SIGKILL\n");
}
if(signal(SIGSTOP,signal_handler)==SIG_ERR)
{
printf("\n can't catch SIGSTOP\n");
}
while(1) //infinite loop
sleep(1); // 1s ,so that the CPU is not busy
return 0;
}
我得到了第二个进程的 pid ...假设 xxxx
然后我使用以下命令...
enter code here
杀死 -USR1 xxxx
但它什么也没显示....
然后我也尝试通过在第一个程序中调用以下函数......但没有用......
enter code herekill(xxxx,SIGUSR1);
帮帮我..!!!!
【问题讨论】:
-
1) 不应在信号处理程序中使用 printf(); printf 是不可重入的。 2)您的 main() 无声退出,尝试添加无限循环或 sleep() 或 pause()。 3)也许,你会想要添加一个 waitXX()
-
@wildplasser 这个评论有很多很好的建议。您为什么不将其发布为答案?
-
因为都是小事。通常的嫌疑人......一个小的搜索,甚至可能在 SO 上也会发现完全相同的问题。 (甚至更多)
-
我也试过不使用 printf(),有一个 sleep(1);添加无限循环的语句;..