如何继续此流程并打印出其流程ID?

时间:2016-01-24 22:03:49

标签: c++

#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
using namespace std;

int main ()
{
 int pid;
 printf ("\nI'm the original process with PID %d.\n", getpid ());
 pid = fork ();                     /* Duplicate process. Child and parent continue from here */
 if (pid != 0)                      /* pid is non-zero, so I must be the parent */
   {
     printf ("I'm the parent process with PID %d.\n", getpid());
     printf ("My child's PID is %d.\n", pid);
   }
 else                              /* pid is zero, so I must be the child */
   {
     printf ("I'm the child process with PID %d.\n", getpid ());
     pid= fork();      
     printf ("I'm the child's child with PID %d.\n", getpid ());    
   }
 printf ("PID %d terminates.\n", getpid());
}

到目前为止,我的程序正在运行,但我需要我的程序继续执行9个进程,指示进程2是进程3的父进程,进程3是进程4的父进程,依此类推。到目前为止,我已经能够输出具有进程ID的父进程以及子进程ID。问题是,它只输出父母和孩子一次。我要求我的程序创建一个包含10个进程的链,并打印出它们的父进程和子进程id。目前我已经能够只输出一次父ID和它的子ID。 什么是实现这一目标的最佳方法?

1 个答案:

答案 0 :(得分:0)

你可以尝试这样的事情:

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

static int counter = 1;    

void init_proc()
{
    pid_t pid;
    pid = fork();
    if(pid==0)
    {
        if(counter==10)
        {
            return;
        }
        else
        {
            counter++;
            init_proc();
        }
    }
    else if(pid > 0)
    {
        int status;
        waitpid(pid, &status, WNOHANG);
        printf("Process %d with child %d\n", getpid(), pid);
    }
    else
    {
        fprintf(stderr,"Error: Could not initialize process\n");
    }
}    

int main ()
{
     init_proc();
     return 0;
}

请注意,pid != 0并不一定意味着您处于同等过程中。如果fork()返回-1,则表示存在错误。有关此内容的更多信息:http://linux.die.net/man/2/fork

在我的例子中,我没有使用你想要的printf,但是你可以稍微玩一下以获得你想要的效果。