如果fork和exec模式仅用于运行程序而不冻结当前程序,那么有什么好处,例如,使用这一行:
system("program &"); // run in background, don't freeze
答案 0 :(得分:5)
system
函数创建一个用于运行程序的新shell实例,这就是您可以在后台运行它的原因。与fork
/ exec
的主要区别在于,使用这样的system
实际上创建了两个进程,即shell和程序,并且您无法通过匿名直接与新程序通信管道
答案 1 :(得分:1)
fork + exec比system()更轻量级。后者将为shell创建一个进程,shell将解析给定的命令行并调用所需的可执行文件。这意味着更多的内存,更多的执行时间等。显然,如果程序将在后台运行,这些额外的资源将只是暂时消耗,但根据您使用它的频率,差异将非常明显。
答案 2 :(得分:1)
man page for system明确表示system
通过“调用/ bin / sh -c 命令”执行命令,这意味着系统至少创建 两个进程:/bin/sh
然后程序(shell启动文件可能产生多个进程)
这可能会导致一些问题:
/bin/sh
,或者不使用&
在后台运行进程,该怎么办?)执行此操作的正确方法是fork
+ exec
,它会创建完全一个进程。它可以让您更好地控制性能和资源消耗,并且更容易修改以执行简单,重要的事情(如错误处理)。