(C ++,Unix)在同一父进程

时间:2016-02-11 05:59:02

标签: c++ unix exec fork

在我的程序中,我有一个fork(),它从父级创建一个子进程。该子项首先运行并创建一个文本文件“ text.txt ”。它存储了各种各样的东西,然后父函数必须使用exec()命令打印出目录,然后显示文件的内容。

到目前为止,我在这一点上有这两行:

execlp("/bin/pwd", "pwd", NULL);
execlp("/bin/cat", "cat", "text.txt", NULL);

如果只有一个程序运行,这两个程序都能很好地工作。但是,当我同时拥有它们时,只有第一个在程序结束之前运行。我如何让它们一个接一个地运行?

为清楚起见,教师请求两个exec()都在同一个子进程中。

1 个答案:

答案 0 :(得分:0)

execlp()将替换您的进程,并且只有在失败时才会返回。解决这个问题的常用方法是使用fork()。

if (fork() == 0)
{
  execlp("/bin/pwd", "pwd", NULL);
  perror ("execlp(bin/pwd)");
  exit(1);
}
wait(&status); /* wait for child to finish */
if (fork() == 0)
{
  execlp("/bin/cat", "cat", "text.txt", NULL);
  perror ("execlp(bin/pwd)");
  exit(1);
}
wait(&status); /* wait for child to finish */