我们可以使用exec()给出& amp;作为一个论点?

时间:2009-10-02 12:59:34

标签: c process background exec unix

如果没有,我们如何在C中启动后台进程?

3 个答案:

答案 0 :(得分:9)

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

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

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

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

因此,为了创建“后台”流程,您当前的流程应该跳过等待的调用。

答案 1 :(得分:4)

使用fork()调用创建一个新进程,然后使用exec()将程序加载到该进程中。有关详细信息,请参阅手册页(man 2 forkman 2 exec)。

答案 2 :(得分:3)

Fork返回孩子的PID,所以常见的习语是:

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