system
和exec
系列命令有什么区别?我特别想知道他们中的哪一个创建子进程来工作?
发布于 2009-11-09 02:33:44
system()
调用sh
来处理您的命令行,因此您可以获得通配符扩展等。exec()
和它的朋友用新的进程映像替换当前的进程映像。
使用system()
,您的程序将继续运行,并且您将获得有关所调用的外部命令的一些状态。使用exec()
,您的进程将被清除。
一般而言,我猜您可以将system()
视为更高级别的接口。您可以使用fork()
、exec()
和wait()
的某种组合来复制它的功能。
要回答您的最后一个问题,system()
会创建子进程,而exec()
系列不会。为此,您需要使用fork()
。
发布于 2009-11-09 02:33:06
exec函数成功时会替换当前运行的进程映像,不会创建子进程(除非您之前使用fork()
自己创建了子进程)。system()函数派生一个子进程,并在提供的命令执行完毕或出现错误时返回。
发布于 2009-11-09 02:34:48
system()
将在它产生的子进程中执行所提供的命令。exec()
将用您指定的新可执行文件的调用替换当前进程。如果你想使用exec
派生一个子进程,你必须提前fork()
你的进程。
https://stackoverflow.com/questions/1697440
复制相似问题