Linux中"system"和"exec"的区别?

Kam*_*il 67 c linux fork exec

systemexec家庭命令有什么区别?特别是我想知道哪一个创建子进程工作?

Car*_*rum 89

system()呼叫sh处理您的命令行,因此您可以获得通配符扩展等, exec()并且其朋友用新的过程映像替换当前过程映像.

随着system(),您的程序继续运行,您将获得有关您调用的外部命令的一些状态.随着exec(),你的过程被抹杀了.

一般来说,我猜您可以将其system()视为更高级别的界面.你可以使用一些组合自己复制它的功能fork(),exec()以及wait().

要回答您的最终问题,system()会导致创建子进程,而不会创建子进程exec().你需要使用fork()它.

  • 引自[system POSIX手册](http://man7.org/linux/man-pages/man3/system.3p.html):* system()函数的行为就像创建了子进程一样使用[`fork()`](http://man7.org/linux/man-pages/man3/fork.3p.html),子进程使用[`execl()`](http如下所示://://man7.org/linux/man-pages/man3/exec.3p.html):`execl(<shell path>,“ sh”,“ -c”,命令,(char *)0); `*。 (2认同)

Bob*_*toe 19

exec函数在成功时替换当前正在运行的过程映像,不创建子项(除非您以前自己执行过此操作fork()).system()函数会分叉子进程,并在提供的命令执行完毕或发生错误时返回.


Tim*_*sch 7

system()将在它生成的子进程中执行提供的命令.exec()将通过调用您指定的新可执行文件替换当前进程.如果您想使用生成子进程exec,则必须fork()事先处理您的进程.


Dig*_*oss 6

要创建流程:

  • fork(2),系统直接调用内核

要执行程序,请替换当前图像:

  • execve(2),系统直接调用内核,通常只是调用 exec

等待子进程完成:

  • wait(2),系统直接调用内核

在子进程的shell中运行程序并等待它完成:

  • system(3),图书馆功能

要获取上述所有内容的手册页:

   $ man 2 fork execve wait
   $ man 3 system
Run Code Online (Sandbox Code Playgroud)