我需要两个子进程来执行此操作:
printf
偶数0到100之间的数字。printf
0到100之间的奇数。执行后我在终端中应该看到的是:0 1 2 4..100
我该怎么做?
我试过这个程序,但它不起作用,它只给我第一个整数0:
#include <unistd.h>
#include <stdio.h>
#include <signal.h>
void handler1(int sig)
{
if(sig == SIGCONT)
{
raise(SIGCONT);
}
}
void handler2(int sig)
{
if(sig == SIGCONT)
{
raise(SIGCONT);
}
}
int main()
{
int i=-1;
if(fork()==0)
{
signal(SIGCONT,handler1);
while(1)
{
printf("%d\n",i+1);
pause();
kill(getpid()+1,SIGCONT);
}
}
if(fork()==0)
{
signal(SIGCONT,handler2);
while(1)
{
pause();
printf("%d\n",i+1);
kill(getpid()-1,SIGCONT);
}
}
}
答案 0 :(得分:2)
信号不是解决此问题的好方法。第一个信号丢失(它是由第一个孩子在第二个孩子开始之前发送的),并且你最终被锁定(因为其中一个进程正在等待它已经错过的信号)。
尝试使用信号量或消息队列。他们对这个问题免疫,因为他们不会在系统中迷失,即使并非所有涉及的过程都已经开始。