日期:2014-05-16  浏览次数:20663 次

父进程与子进程交替打印字母//怎么用pause()函数代替while(1)?
[code=C/C+#include] <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <stdlib.h>
int ppid, pid;
void parent(int signo){
static c = 'A';
printf("%c ", c);
fflush(stdout);
kill(pid, SIGUSR1);
if(c=='Z')exit(-1);
c++;
//pause();
}

void child(int signo){
static c = 'a';
printf("%c ", c);
fflush(stdout);
kill(ppid, SIGUSR1);
if(c=='z')exit(-1);
c++;
//pause();
}

int main()
{
signal(SIGUSR1, parent);
pid = fork();
if(pid==0){
signal(SIGUSR1, child);
ppid = getppid();
sleep(1);
kill(ppid, SIGUSR1);
while(1);
//pause();
}
pause();
while(1);
}+

[/code]

------解决方案--------------------
你既然想交替打印,那当然得有循环。用pause代替while,.. 。。。 
如果使用pause,而不用sigsuspend,自然会出现信号在pause前发生,导致程序一直pause下去。