C 在后台执行命令
我正在实现一个模拟真实bashshell的迷你shell。我在后台执行命令,比如C 在后台执行命令,c,linux,bash,shell,exec,C,Linux,Bash,Shell,Exec,我正在实现一个模拟真实bashshell的迷你shell。我在后台执行命令,比如ls& 我的第一种方法是以下方法(不起作用) 然后,我尝试了另一种方法,修改fork()的父进程,不等待子进程,以防它在后台运行。这里的问题是,它应该打印后台运行的作业列表,以便在bash shell中模拟后台行为,但是命令jobs没有作为execvp()的参数正确执行 我的问题是,有没有更简单的方法在C中实现这种后台调用?如果没有,我提到的两个选项中有什么失败了?您的示例失败的原因是 编码的“&”是“ls”程序的
ls&
我的第一种方法是以下方法(不起作用)
然后,我尝试了另一种方法,修改fork()
的父进程,不等待子进程,以防它在后台运行。这里的问题是,它应该打印后台运行的作业列表,以便在bash shell中模拟后台行为,但是命令jobs
没有作为execvp()的参数正确执行
我的问题是,有没有更简单的方法在C中实现这种后台调用?如果没有,我提到的两个选项中有什么失败了?您的示例失败的原因是
- 编码的“&”是“ls”程序的参数。当您在shell提示下输入命令时,&被shell使用,“ls”程序永远看不到背景
- “exec()”调用终止当前程序(即迷你shell)
你可能想要的是
system("ls &");
读一本好的Unix书籍。您需要了解fork()、exec()、wait()以及更多信息。有一种更好的方法,可以使用。为了正确执行作业
命令,您必须正确地实现它。例如,通过跟踪所有分叉的“后台”进程。Im当前使用For()。如果我跟踪所有的后台进程执行,我将获得什么好处?了解它们以便在执行作业时列出它们的好处?请注意,运行系统(“ls&”)会将后台工作委托给/bin/sh
,但无法进行进一步的作业控制。
system("ls &");