Linux中"system"和"exec"之间的区别是什么?

79

systemexec命令族的区别是什么?尤其是我想知道它们中哪一个会创建子进程来工作?

12个回答

0

system()函数使用shell来调用所需的程序或内置命令,这种方式效率低下,因为在启动程序之前需要先启动shell。

在exec系统调用系列的情况下,将创建一个全新的映像,也就是说,它们会用路径、文件或其他参数指定的新进程替换当前进程。

需要记住的是,在使用exec系统调用系列时,原始程序在新程序启动后将不再运行。


0
通常情况下,“system”命令效率低下,除非你的代码很小,否则不应使用它。如果你需要在进程中执行多个程序,最好使用fork&exec,尽管这会使它更加复杂。 以下是它们之间的区别列表:
1- “system”命令创建一个shell副本来执行您的程序。每次调用系统时,都会创建一个shell副本。因此,在您的进程内有大量要执行的程序时,请勿使用它。
2- 具体而言,如果您想执行诸如“mv”、“mkdir”之类的系统函数,最好使用诸如mkdir()、unlink()或remove()等例程,而不是通过“system(“rm ....”)或system(“mkdir ....”)”来执行它们。
3- 由于系统调用shell来执行您想要的程序,因此可能会出现一些用户权限问题。例如,有人可能会破解您的代码并通过系统命令执行其他操作,而不是您打算执行的程序。
有关更多信息,您可以阅读David Curry的《UNIX系统编程》第11章。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接