在后台执行命令

时间:2015-04-06 16:41:58

标签: c linux bash shell exec

我正在实现一个模拟真正的bash shell的minishell。我在背景中执行命令,例如ls &

我的第一种方法是以下(不起作用)

char *execArgs[] = { "ls", "&", NULL };
execvp("ls", execArgs);

然后,我尝试了另一种方法,修改fork()的父进程,而不是等待它应该在后台运行。这里的问题是,它应该打印在后台运行的作业列表,以便在bash shell中模拟背景bahaviour,但命令jobs未作为execvp()的参数正确执行。

我的问题是,有没有更简单的方法在C中实现这种后台调用?如果没有,在我提到的任何一个选项中它失败了什么?

1 个答案:

答案 0 :(得分:1)

您的示例失败的原因是

  • “&”因为你编码它是“ls”程序的参数。在shell提示符下输入命令时,“&”由shell使用,“ls”程序永远不会看到背景。
  • “exec()”调用终止当前程序(即你的迷你shell)。

你可能想要的是

system("ls &");

阅读一本好的Unix书。您需要知道fork(),exec(),wait()等等。