- 论坛徽章:
- 0
|
[code=c]
#include "apue.h"
static volatile sig_atomic_t sigflag;
static sigset_t newmask,oldmask,zeromask;
static void sig_usr1(int signo)
{
sigflag=1;
printf("1........\n");
}
static void sig_usr2(int signo)
{
sigflag=1;
printf("2........\n");
}
void TELL_WAIT(void)
{
if(signal(SIGUSR1,sig_usr1)==SIG_ERR)
printf("signal(SIGUSR1) error");
if(signal(SIGUSR2,sig_usr2)==SIG_ERR)
printf("signal(SIGUSR2) error");
sigemptyset(&zeromask);
sigemptyset(&newmask);
sigaddset(&newmask,SIGUSR1);
sigaddset(&newmask,SIGUSR2);
if(sigprocmask(SIG_BLOCK,&newmask,&oldmask)<0)
printf("SIG_BLOCK error");
}
void TELL_PARENT(pid_t pid)
{
printf("tell parent...\n");
kill(pid,SIGUSR2);
}
void WAIT_PARENT(void)
{
printf("wait parent...\n");
while(sigflag==0)
sigsuspend(&zeromask);
sigflag=0;
if(sigprocmask(SIG_SETMASK,&oldmask,NULL)<0)
printf("SIR_SETMASK error");
}
void TELL_CHILD(pid_t pid)
{
printf("tell child...\n");
kill(pid,SIGUSR1);
}
void WAIT_CHILD(void)
{
printf("wait chile...\n");
while(sigflag==0)
sigsuspend(&zeromask);
sigflag=0;
if(sigprocmask(SIG_SETMASK,&oldmask,NULL)<0)
printf("SIR_SETMASK error");
}
[/code]
[code=c]
#include "10-17.h"
int main(void)
{
int c,pid;
int count=10;
if((pid=fork())<0)
printf("fork error");
else if(pid==0)
{
while(count>0)
{
count--;
printf("child print count:%d\n",count);
fflush(NULL);
TELL_PARENT(getppid());
WAIT_PARENT();
}
exit(0);
}
else
{
while(count>0)
{
WAIT_CHILD();
count--;
printf("parent print count:%d\n",count);
TELL_CHILD(pid);
}
exit(0);
}
}
[/code]
本程序是根据apue上的代码编写,其中头文件(第一段代码)是书上源码,程序打算实现父进程同子进程交替输出十次。可是运行结果却中途停滞,如图
想了两天都不知道是什么原因,另外那个输出“User defined signal 2”不知道是什么意思,求高人解答。。。。 |
|