-1

我在 Linux 中编写一个基本的 shell 作为爱好,我想开始执行程序,但不知道如何做到这一点。我见过execp()它的各种兄弟姐妹,但显然这迫使内核放弃当前正在运行的进程,在这种情况下是我的 shell,并继续使用新进程。

所以基本上我所需要的只是一个函数,我可以用它来调用命令,ls或者cd让它执行,然后返回到我的 shell。

感谢所有帮助。

4

3 回答 3

2

ouah 的回答基本上是正确的,但它不适用于cd. 您的 shell 需要将其实现为内置命令(即 shell 需要包含cd.

这样做的原因是fork首先创建当前进程的新副本(在本例中为 shell 的运行实例)。然后 exec 用您要运行的可执行文件覆盖新进程。当命令完成时,新进程终止并消失。如果您使用cd它,它将更改新进程的工作目录,但保持旧进程(shell)的工作目录完全不变。

于 2012-08-03T11:06:32.160 回答
1

创建一个新进程,fork然后调用exec.

于 2012-08-03T10:57:23.037 回答
1

使用这样的东西:

if (fork ()==0) {
    execl ("/bin/sh",NULL);
}

这将创建新进程(已经运行的进程的精确副本),然后用新进程替换它。请注意,在某些 CPU 不完全支持虚拟内存的环境中,这可能需要一些解决方法,并且您的原始进程太大以至于您无法复制它。

于 2012-08-03T10:59:45.917 回答