我需要从我的linux守护进程中运行一个linux命令,如“df”,以了解可用空间,已用空间,分区总大小和其他信息。我有调用system,exec,popen等选项。
但是,由于每个命令都会生成一个新进程,因此无法在调用它的同一进程中运行这些命令吗?
同时我需要从linux守护进程运行此命令,因为我的守护进程不应该保留任何终端。它会影响我的守护进程吗?
或者是他们用于获取已安装的分区信息的任何C或C ++标准API
答案 0 :(得分:4)
没有标准 API,因为这是特定于操作系统的概念。
然而,
getmntent
/getmntent_r
辅助函数解析/proc/mounts
(或/etc/mtab
)。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将成为该进程的控制终端。但这不会影响您的程序,因为您的程序在成为守护程序时已经终止了终端,并且由于子进程是会话负责人,因此无法更改进程的控制终端。