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

父进程和子进程通信的问题
#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);
    }
}