在后台执行命令
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() 等。
我正在实现一个 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() 等。