我需要從我的linux守護進程運行一個linux命令,例如「df」來知道可用空間,已用空間,parition的總大小以及其他信息。我有一個像呼叫系統,EXEC,POPEN等選項..從Daemon運行Linux命令
但因爲這每個命令產生新的進程,這是不可能運行從調用它在同一個進程中的命令?
與此同時,我需要從一個Linux守護進程運行這個命令,因爲我的守護進程不應該持有任何終端。它會影響我的守護進程行爲嗎?
或者是它們的任何C或C++標準用於獲取安裝paritions信息
我需要從我的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