#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。 什么是实现这一目标的最佳方法?
答案 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,但是你可以稍微玩一下以获得你想要的效果。