2015-09-06 102 views
0

所以我在unix中创建了一个c程序。这就是它所做的。Exec()和Fork()

1)它分叉了一个过程。

子进程: 执行execv(),其上打印“报警响”的“x”秒后

父进程一个闹钟程序: 执行waitpid函数对儿童的上方。 然后退出。

输出: 所以我跑了它,我收到

一切正常的“X秒后报警响”。但现在我想要的是子进程在后台运行。这意味着我不想看到它的输出。但我希望它运行并退出。

+0

再次分叉子叉,并在这个大孩子做执行。 更多信息:http://stackoverflow.com/questions/10932592/why-fork-twice – alk

+0

我让孩子叉子成为执行者的孙子。然后,我让孩子不用等待grandchi; d。我仍然看到孙子的输出=/ – RStyle

+0

你会从登录shell或在启动时作为系统进程调用你的程序吗?一个“守护进程”(你的标记)是一回事,“背景”(你的措辞)是两件事之一,压制或重定向输出(也许你的需要?)是另一回事。你究竟想要什么? – pilcrow

回答

0

要使子进程在后台运行,您需要将其设置为daemon process

有几个步骤来使它成为一个守护进程..

  1. 叉掉父进程
  2. 更改文件模式掩码(umask)
  3. 打开任何日志写
  4. 创建唯一的会话ID(SID)
  5. 将当前工作目录更改为安全的地方
  6. 关闭标准文件描述符

有关更好的解释,请参见this