作为一种爱好,我正在 Linux 中编写一个基本的 shell,我想开始处理程序执行,但不知道如何执行此操作。我见过 execp() 及其各种 sibling ,但显然这会强制内核放弃当前正在运行的进程(在本例中是我的 shell),并继续执行新进程。
所以基本上我需要的是一个函数,我可以用它来调用命令,例如 ls
或 cd
让它执行,然后返回到我的 shell。
感谢所有帮助。
最佳答案
ouah 的答案本质上是正确的,但它不适用于 cd
。您的 shell 需要将其实现为内置命令(即 shell 需要包含 cd
的代码。
原因是 fork
首先创建当前进程的新副本(在本例中为 shell 的运行实例)。然后 exec 用您想要运行的可执行文件覆盖新进程。命令完成后,新进程将终止并消失。如果您将其用于cd
,它将更改新进程的工作目录,但保持旧进程(shell)的工作目录完全不变。
关于c - 执行与我的 C 程序不同的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11794346/