我在Linux中编写基本shell作为一种爱好,我想开始编写程序执行,但不知道如何执行此操作。我见过execp()
及其各种兄弟姐妹,但显然迫使内核删除当前正在运行的进程,在本例中是我的shell,并继续使用新进程。
所以我基本上只需要一个函数来调用ls
或cd
之类的命令让它执行然后返回我的shell。
感谢所有帮助。
答案 0 :(得分:2)
ouah的答案基本上是正确的,但它不适用于cd
。您的shell需要将其作为内置命令实现(即shell需要包含cd
的代码。
原因是fork
首先创建当前进程的新副本(在这种情况下是shell的运行实例)。然后exec用您要运行的可执行文件覆盖新进程。命令完成后,新进程终止并消失。如果将其用于cd
,它将更改新进程的工作目录,但保留旧进程(shell)的工作目录完全不受影响。
答案 1 :(得分:1)
使用fork
创建新流程,然后调用exec
。
答案 2 :(得分:1)
使用类似的东西:
if (fork ()==0) {
execl ("/bin/sh",NULL);
}
这将创建新进程(已经运行的进程的精确副本),然后将其替换为新进程。 请注意,在某些CPU不完全支持虚拟内存的环境中,这可能需要一些解决方法,而且您的原始进程非常大,无法复制它。