2012-10-20 55 views
0

我有一個程序(Crafty象棋),從控制檯啓動時工作得很好。對於我的應用程序,我已將其進行了簡化。當守護進程時,應該通過chdir("/")將工作目錄更改爲「/」。Linux守護進程:替代chdir(「/」)?

當我遵循該建議時,程序在某些用例中退出,因爲它在「/」中沒有適當的權限。當我不chdir,該計劃的工作原理,但只是忽略chdir是一個柺杖。

是否有替代遺漏chdir("/")的聲音?

+0

你可以引用一個執行chdir(「/」)的建議來源嗎?我懷疑這是一個好主意(出於多種原因),並且有興趣知道這是建議的地方,爲什麼? –

+1

你是什麼意思「它沒有適當的權限」?怎麼了?什麼不行? –

+0

@RobKielty請參閱http://www.itp.uzh.ch/~dpotter/howto/daemonize。 「這可以防止當前目錄被鎖定,因此無法刪除它。」 –

回答

3

它可能不應該寫入當前目錄。相反,寫一些特定的目錄會更好。而不是cd到/tmp並將文件寫入當前目錄,將文件寫入/tmp/whatever —即始終使用絕對路徑。

並在相關說明中,如果可以避免,請勿硬編碼/tmp。使其成爲配置選項,或者使用$TMPDIR環境變量,或者最重要的是使用mktemp()

0

你可以調用daemon(3)功能(具有非零第一nochdir參數),使其守護進程的過程,而不做chdir("/")

但約翰Kugelman建議,你不應該寫(也不會讀)的任何守護程序中的相對路徑(或者,您應該對可讀寫的目錄執行明確的chdir搜索)。