如果不是的话,我们如何在C中启动一个后台进程呢?
在Unix中,exec()只是故事的一部分。
exec()用于在当前进程中启动一个新的二进制文件。 这意味着当前正在运行的二进制文件将不再运行。
所以,在你调用exec()之前,你需要调用fork()来创建一个新的进程,以便你的当前二进制文件可以继续运行。
通常,要让当前的二进制等待新进程退出,请调用其中一个wait *()系列。 该函数将使当前进程进入休眠状态,直到您正在等待的进程完成。
所以为了创建一个“背景”的过程,你当前的过程应该跳过等待的呼叫。
使用fork()
调用来创建一个新进程,然后使用exec()将程序加载到该进程中。 请参阅手册页( man 2 fork
, man 2 exec
)以获取更多信息。
Fork返回孩子的PID,所以常用的习惯是:
if(fork() == 0) // I'm the child exec(...)