从Daemon运行Linux命令

时间:2010-07-21 03:12:59

标签: c++ c linux daemon

我需要从我的linux守护进程中运行一个linux命令,如“df”,以了解可用空间,已用空间,分区总大小和其他信息。我有调用system,exec,popen等选项。

  1. 但是,由于每个命令都会生成一个新进程,因此无法在调用它的同一进程中运行这些命令吗?

  2. 同时我需要从linux守护进程运行此命令,因为我的守护进程不应该保留任何终端。它会影响我的守护进程吗?

  3. 或者是他们用于获取已安装的分区信息的任何C或C ++标准API

2 个答案:

答案 0 :(得分:4)

没有标准 API,因为这是特定于操作系统的概念。

然而,

  1. 您可以使用(非便携式)getmntent/getmntent_r辅助函数解析/proc/mounts(或/etc/mtab)。
  2. 使用有关已安装文件系统的信息,您可以使用statfs获取其统计信息。

答案 1 :(得分:1)

您可能会发现探索i3status计划源代码非常有用:http://code.stapelberg.de/git/i3status/tree/src/print_disk_info.c

回答您的其他问题:

  

但是,由于每个命令都会生成一个新进程,因此无法在调用它的同一进程中运行这些命令吗?

没有;整个'命令'是必须在自己的进程中运行的自包含程序。

根据您希望执行程序的频率,fork();exec()并不是那么糟糕。除了自己收集数据与执行帮助程序之外,没有硬限制。一分钟,您可能正好执行命令。每隔一秒,你最好自己收集数据。我不确定分界线在哪里。

  

同时我需要从linux守护进程运行此命令,因为我的守护进程不应该持有任何终端。它会影响我的守护进程吗?

如果命令在不包括setsid(2)的终端上呼叫open(2),然后呼叫O_NOCTTY,则该终端might将成为该进程的控制终端。但这不会影响您的程序,因为您的程序在成为守护程序时已经终止了终端,并且由于子进程是会话负责人,因此无法更改进程的控制终端。