从Daemon运行Linux命令
我需要从我的linux守护进程运行一个linux命令,例如“df”来知道可用空间,已用空间,parition的总大小以及其他信息。我有一个像呼叫系统,EXEC,POPEN等选项..从Daemon运行Linux命令
但因为这每个命令产生新的进程,这是不可能运行从调用它在同一个进程中的命令?
与此同时,我需要从一个Linux守护进程运行这个命令,因为我的守护进程不应该持有任何终端。它会影响我的守护进程行为吗?
或者是它们的任何C或C++标准用于获取安装paritions信息
没有标准 API的API,因为这是一个特定于操作系统的概念。
然而,
- 您可以分析
/proc/mounts
(或/etc/mtab
)与(非便携式)getmntent
/getmntent_r
辅助功能。 - 使用关于已挂载文件系统的信息,您可以使用
statfs
获取其统计信息。
你可能会发现,探索i3status
程序的源代码:http://code.stapelberg.de/git/i3status/tree/src/print_disk_info.c
为了回答您的其他问题:
但因为这每一个命令产生新的进程,这是不可能的在调用它的同一个进程中运行这些命令?
否;完整的'命令'是自包含的程序,必须在自己的过程中运行。
取决于你希望执行你的程序的频率,fork();exec()
并不是那么糟糕。除了执行帮助程序之外,您自己收集数据会更好。一分钟,你可能正在执行命令。每秒一次,你可能会更好地自己收集数据。我不确定分界线在哪里。
与此同时,我需要从一个Linux守护进程运行这个命令,因为我的守护进程不应该持有任何终端。它会影响我的守护进程行为吗?
如果命令调用setsid(2)
,然后在终端上open(2)
而不包括O_NOCTTY
,该终端might成为该过程控制终端。但是这不会影响你的程序,因为你的程序在成为守护进程时已经拒绝了终端,并且由于子进程是会话负责人,所以它不能更改进程的控制终端。
这也将提供有关免费和已用空间的信息 – Poorna 2010-07-21 03:41:35
@siri,我用更好的选项更新了答案(是的,它会)。 – 2010-07-21 03:52:48
我只想确认从守护进程运行命令是对还是错,以及它可能产生的副作用 – Poorna 2010-07-21 04:01:37