我有一个程序(Crafty chess)从控制台启动时工作得很好。对于我的应用程序,我已经守护它了。在守护进程时,应该通过chdir("/")
将工作目录更改为“/”。
当我遵循该建议时,程序会在某些用例中退出,因为它在“/”中没有适当的权限。当我没有chdir
时,该程序可以正常工作,但只是遗漏chdir
就是一个拐杖。
是否有省略chdir("/")
的声音替代方案?
答案 0 :(得分:3)
可能不应该写入当前目录。写一些特定的目录会更好。而不是cd到/tmp
并将文件写入当前目录,而是将文件写入/tmp/whatever
- 即始终使用绝对路径。
在相关说明中,如果可以避免,请不要硬编码/tmp
。使其成为配置选项,或使用$TMPDIR
环境变量,或者最重要的是,使用mktemp()
。
答案 1 :(得分:0)
您可以调用daemon(3)函数(使用非零的nochdir
参数),以便在不执行chdir("/")
的情况下守护进程
但正如John Kugelman建议的那样,你不应该在守护程序中编写(或读取)任何相对路径(或者你应该对你可以读写的目录进行显式chdir
)。 / p>