【发布时间】:2015-06-11 02:23:32
【问题描述】:
我正在实现一个模拟真实 bash shell 的 minishell。我忙于在后台执行命令,例如ls &。
我的第一种方法是以下(不起作用)
char *execArgs[] = { "ls", "&", NULL };
execvp("ls", execArgs);
然后,我尝试了另一种方法,修改了fork() 的父进程,而不是等待子进程,以防它应该在后台运行。这里的问题是它应该打印在后台运行的作业列表,以便在 bash shell 中模拟后台行为,但是命令 jobs 没有作为 execvp() 的参数正确执行。
我的问题是,有没有更简单的方法可以在 C 中实现这个后台调用?如果没有,我提到的任何一个选项都失败了什么?
【问题讨论】:
-
有更好的方法,使用
fork()。 -
为了正确执行您的
jobs命令,您必须正确执行它。例如,通过跟踪所有分叉的“后台”进程。 -
我目前正在使用 for()。如果我跟踪所有后台进程执行,我将获得什么好处?
-
在执行
jobs时了解它们以便列出它们的好处?