linux c --- 创建子进程 system() 与 exec() 的区别
功能差异:
- system()函数的主要功能是执行一个系统命令,这个命令由用户通过命令行参数传递给system()函数。system()函数会创建一个新的进程来执行这个命令,并等待这个进程执行完毕后才返回。因此,system()函数主要用于执行简单的、可以通过命令行传递参数的系统命令。
- exec()函数则是一组函数的总称,它们提供了在进程中执行其他程序的能力。这些函数会替换当前进程的映像,也就是说,当exec()函数执行完毕后,原来的进程就不复存在了,而是变成了新的程序的进程。因此,exec()函数主要用于执行复杂的、需要替换当前进程映像的程序。
返回值差异:
- system()函数在执行成功时返回非零值,失败时返回零。这个返回值可以用来判断命令是否执行成功。
- exec()函数在执行成功时并不返回,因为它的目标是替换当前进程的映像,而不是返回执行结果。如果exec()函数执行失败,它会返回-1,并设置相应的errno值。
参数传递方式差异:
- system()函数接受一个命令行参数数组,这个数组包含了要执行的命令及其参数。这些参数是通过字符串指针的形式传递给system()函数的。
- exec()函数则接受不同的参数,具体取决于要执行的程序类型。一般来说,exec()函数会接受一个可执行文件的路径作为第一个参数,然后可以传递其他参数给这个程序。这些参数也是通过字符串指针的形式传递给exec()函数的。