Ejemplo n.º 1
0
int main(int argc, char *argv[])
{
        pid_t child1, child2;

        if (argc < 3) {
                printf("Usage: waitpid [0 1] [0 1]\n");
                exit(1);
        }

        child1 = fork();

        if (child1 < 0) {
                die("child1 fork");
        }
        else if (child1 == 0) {
                child2 = fork();

                if (child2 < 0) {
                        die("child2 fork");
                }
                else if (child2 == 0) {
                        child2_do();
                }
                else {
                        child1_do(child2, argv[1]);
                }
        }
        else {
                father_do(child1, argv[2]);
        }

        return 0;
}
Ejemplo n.º 2
0
int main(int argc,char *argv[])
{
	int pid1, pid2;
	// fd[0] for read, fd[1] for write
	int fd[2];

	pipe(fd);

	// 1-->2
	switch(pid1 = fork())
	{
		case -1:
			{
				printf("fork error\n");
				exit(1);
			}
		case 0:
			{
				close(fd[1]);
				child_1_do(fd[0]);
			}
		default:
			{
				printf("1 --> 2, 1 id=%d, 2 id=%d\n", getpid(), pid1);
				// 1 --> 3
				switch (pid2 = fork())
				{
					case -1:
						{
							printf("fork error\n");
							exit(1);
						}
					case 0:
						{
							close(fd[1]);
							child_2_do(fd[0]);
						}
					default:
						printf("1 --> 3, 1 id=%d, 3 id=%d\n", getpid(), pid2);
						break;
				}
				break;
			}		
	}
	
	close(fd[0]);
	father_do(pid1, pid2, fd[1]);
	return 0;
}