Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在后台执行命令_C_Linux_Bash_Shell_Exec - Fatal编程技术网

C 在后台执行命令

C 在后台执行命令,c,linux,bash,shell,exec,C,Linux,Bash,Shell,Exec,我正在实现一个模拟真实bashshell的迷你shell。我在后台执行命令,比如ls& 我的第一种方法是以下方法(不起作用) 然后,我尝试了另一种方法,修改fork()的父进程,不等待子进程,以防它在后台运行。这里的问题是,它应该打印后台运行的作业列表,以便在bash shell中模拟后台行为,但是命令jobs没有作为execvp()的参数正确执行 我的问题是,有没有更简单的方法在C中实现这种后台调用?如果没有,我提到的两个选项中有什么失败了?您的示例失败的原因是 编码的“&”是“ls”程序的

我正在实现一个模拟真实bashshell的迷你shell。我在后台执行命令,比如
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 &");