当前位置: 技术问答>linux和unix
linux信号与进程问题求解答
来源: 互联网 发布时间:2017-02-05
本文导语: #include #include #include #include #include #include void fun_sig(int sig) { int stat_val; pid_t pid,pidchild; pid = fork(); if(pid == 0){ printf("1...n"); ...
#include
#include
#include
#include
#include
#include
void fun_sig(int sig)
{
int stat_val;
pid_t pid,pidchild;
pid = fork();
if(pid == 0){
printf("1...n");
}
else{
pidchild = wait(&stat_val);
printf("2...n");
}
}
int main()
{
signal(SIGALRM, fun_sig);
pause();
return 0;
}
假设此文件名为signal.c,
运行:./signal&
运行:killall -SIGALRM signal
则可以输出:
1...
2...
================================================================================
现问题为,我把在main函数中将signal设置为一个死循环,运行在后台,我如果将main函数写成如下:
int main()
{
while(1){
signal(SIGALRM, fun_sig);
pause();
}
return 0;
}
则同样用上面的方式运行的话。
结果:
1...
但是一直输出不了2...
求各位大侠赐教!!!!
#include
#include
#include
#include
#include
void fun_sig(int sig)
{
int stat_val;
pid_t pid,pidchild;
pid = fork();
if(pid == 0){
printf("1...n");
}
else{
pidchild = wait(&stat_val);
printf("2...n");
}
}
int main()
{
signal(SIGALRM, fun_sig);
pause();
return 0;
}
假设此文件名为signal.c,
运行:./signal&
运行:killall -SIGALRM signal
则可以输出:
1...
2...
================================================================================
现问题为,我把在main函数中将signal设置为一个死循环,运行在后台,我如果将main函数写成如下:
int main()
{
while(1){
signal(SIGALRM, fun_sig);
pause();
}
return 0;
}
则同样用上面的方式运行的话。
结果:
1...
但是一直输出不了2...
求各位大侠赐教!!!!
|
刚测试了一下,
pid = fork();
if(pid == 0){
printf("1...n");
}
里面的Printf后面需要跟一个exit(0);返回子进程的退出状态。否则父进程会在wait那里阻塞。
pid = fork();
if(pid == 0){
printf("1...n");
}
里面的Printf后面需要跟一个exit(0);返回子进程的退出状态。否则父进程会在wait那里阻塞。