Exec()和Fork()
问题描述:
所以我在unix中创建了一个c程序。这就是它所做的。Exec()和Fork()
1)它分叉了一个过程。
子进程: 执行execv(),其上打印“报警响”的“x”秒后
父进程一个闹钟程序: 执行waitpid函数对儿童的上方。 然后退出。
输出: 所以我跑了它,我收到
一切正常的“X秒后报警响”。但现在我想要的是子进程在后台运行。这意味着我不想看到它的输出。但我希望它运行并退出。
答
要使子进程在后台运行,您需要将其设置为daemon process。
有几个步骤来使它成为一个守护进程..
- 叉掉父进程
- 更改文件模式掩码(umask)
- 打开任何日志写
- 创建唯一的会话ID(SID)
- 将当前工作目录更改为安全的地方
- 关闭标准文件描述符
有关更好的解释,请参见this。
再次分叉子叉,并在这个大孩子做执行。 更多信息:http://stackoverflow.com/questions/10932592/why-fork-twice – alk
我让孩子叉子成为执行者的孙子。然后,我让孩子不用等待grandchi; d。我仍然看到孙子的输出=/ – RStyle
你会从登录shell或在启动时作为系统进程调用你的程序吗?一个“守护进程”(你的标记)是一回事,“背景”(你的措辞)是两件事之一,压制或重定向输出(也许你的需要?)是另一回事。你究竟想要什么? – pilcrow