在后台执行命令

Execute commands in background

我正在实现一个 minishell,它将模拟真实的 bash shell。我在后台执行命令,例如 ls &.

我的第一个方法如下(不起作用)

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

然后,我尝试了另一种方法,通过修改 fork() 的父进程而不是等待子进程,以防它应该在后台 运行。这里的问题是它应该在后台打印作业列表 运行ning 以模拟 bash shell 中的后台行为,但是命令 jobs 是未作为 execvp().

的参数正确执行

我的问题是,有没有更简单的方法在 C 中实现此后台调用?如果没有,我提到的任何一个选项都会失败吗?

您的示例失败的原因是

  • 您编码的“&”是 "ls" 程序的参数。当您在 shell 提示符下输入命令时,“&”被 shell 消耗并且 "ls" 程序永远看不到后台。
  • "exec()" 调用终止了当前程序(即您的 mini-shell)。

你可能想要的是

system("ls &");

阅读一本很好的 Unix 书籍。您将需要了解 fork()、exec()、wait() 等。