Car*_*rum 89
system()呼叫sh处理您的命令行,因此您可以获得通配符扩展等, exec()并且其朋友用新的过程映像替换当前过程映像.
随着system(),您的程序继续运行,您将获得有关您调用的外部命令的一些状态.随着exec(),你的过程被抹杀了.
一般来说,我猜您可以将其system()视为更高级别的界面.你可以使用一些组合自己复制它的功能fork(),exec()以及wait().
要回答您的最终问题,system()会导致创建子进程,而不会创建子进程exec().你需要使用fork()它.
Bob*_*toe 19
exec函数在成功时替换当前正在运行的过程映像,不创建子项(除非您以前自己执行过此操作fork()).system()函数会分叉子进程,并在提供的命令执行完毕或发生错误时返回.
system()将在它生成的子进程中执行提供的命令.exec()将通过调用您指定的新可执行文件替换当前进程.如果您想使用生成子进程exec,则必须fork()事先处理您的进程.
要创建流程:
fork(2),系统直接调用内核要执行程序,请替换当前图像:
execve(2),系统直接调用内核,通常只是调用 exec等待子进程完成:
wait(2),系统直接调用内核在子进程的shell中运行程序并等待它完成:
system(3),图书馆功能要获取上述所有内容的手册页:
$ man 2 fork execve wait
$ man 3 system
Run Code Online (Sandbox Code Playgroud)