父进程和子进程通信的问题
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <signal.h>
void print(int sig)
{
printf("%d\n", getpid());
}
int main(void)
{
static int count = 0;
pid_t pid;
int i;
for(i=0; i<5; i++)
{
pid = fork();
if(pid == 0 || pid == -1)
break;
}
if(pid == -1)
{
printf("fork fail\n");
exit(1);
}
else if(pid == 0)
{
signal(SIGCHLD, print);
pause();
exit(0);
}
else
{
sleep(1);
kill(pid, SIGCHLD);
exit(0);
}
return 0;
}
需要停止5个子进程,到最后怎样只有一个被停止了?
signal
linux
------解决方案--------------------父进程 在fork前四个进程后并没有往下执行,,, 只有当fork最后一个进程后,for结束,才用得到的pid kill了最后的那个子进程。
------解决方案--------------------如果你想要达到你要的效果 ,可以把后面的逻辑全放在for里面。for(i=0; i<5; i++)
for (i = 0; i < 5; i++)
{
pid = fork();
if(pid == -1)
{
printf("fork fail\n");
exit(1);
}
else if(pid == 0)
{
signal(SIGCHLD, print);
pause();
exit(0);
}
else
{
sleep(1);
kill(pid, SIGCHLD);
}
}