我们可以使用exec()给&作为参数来启动后台进程吗?

如果不是的话,我们如何在C中启动一个后台进程呢?

在Unix中,exec()只是故事的一部分。

exec()用于在当前进程中启动一个新的二进制文件。 这意味着当前正在运行的二进制文件将不再运行。

所以,在你调用exec()之前,你需要调用fork()来创建一个新的进程,以便你的当前二进制文件可以继续运行。

通常,要让当前的二进制等待新进程退出,请调用其中一个wait *()系列。 该函数将使当前进程进入休眠状态,直到您正在等待的进程完成。

所以为了创建一个“背景”的过程,你当前的过程应该跳过等待的呼叫。

使用fork()调用来创建一个新进程,然后使用exec()将程序加载到该进程中。 请参阅手册页( man 2 forkman 2 exec )以获取更多信息。

Fork返回孩子的PID,所以常用的习惯是:

 if(fork() == 0) // I'm the child exec(...)