从我的C程序执行不同的程序

时间:2012-08-03 10:55:50

标签: c shell execution

我在Linux中编写基本shell作为一种爱好,我想开始编写程序执行,但不知道如何执行此操作。我见过execp()及其各种兄弟姐妹,但显然迫使内核删除当前正在运行的进程,在本例中是我的shell,并继续使用新进程。

所以我基本上只需要一个函数来调用lscd之类的命令让它执行然后返回我的shell。

感谢所有帮助。

3 个答案:

答案 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不完全支持虚拟内存的环境中,这可能需要一些解决方法,而且您的原始进程非常大,无法复制它。