我们可以使用 exec() 启动后台进程吗?作为一个论点?
如果没有,我们如何在C中启动后台进程?
If not, how can we start a background process in C?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
如果没有,我们如何在C中启动后台进程?
If not, how can we start a background process in C?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(3)
在 Unix 中,exec() 只是故事的一部分。
exec() 用于在当前进程中启动一个新的二进制文件。这意味着当前进程中当前运行的二进制文件将不再运行。
因此,在调用 exec() 之前,您需要调用 fork() 创建一个新进程,以便当前的二进制文件可以继续运行。
通常,要让当前二进制文件等待新进程退出,您可以调用 wait*() 系列之一。该函数将使当前进程进入睡眠状态,直到您正在等待的进程完成。
因此,为了创建“后台”进程,您当前的进程应该跳过等待调用。
In Unix, exec() is only part of the story.
exec() is used to start a new binary within the current process. That means that the binary that is currently running in the current process will no longer be running.
So, before you call exec(), you want to call fork() to create a new process so your current binary can continue running.
Normally, to have the current binary wait for the new process to exit, you call one of the wait*() family. That function will put the current process to sleep until the process you are waiting is done.
So in order to create a "background" process, your current process should just skip the call to wait.
使用
fork()
调用创建新进程,然后 exec() 将程序加载到该进程中。有关更多信息,请参阅手册页(man 2 fork
、man 2 exec
)。Use the
fork()
call to create a new process, then exec() to load a program into that process. See the man pages (man 2 fork
,man 2 exec
) for more information, too.Fork返回子进程的PID,所以常见的习惯用法是:
Fork returns the PID of the child, so the common idiom is: