Linux-демон: альтернатива chdir("/")?
У меня есть программа (Хитрые шахматы), которая отлично работает, когда запускается с консоли. Для моего приложения я его демонизировал. При демонизации процесса предполагается изменить рабочий каталог на "/" с помощью chdir("/")
,
Когда я следую этому совету, программа закрывается в некоторых случаях, потому что у нее нет необходимых разрешений в "/". Когда я не chdir
, программа работает, но просто уходит chdir
это костыль.
Есть ли разумная альтернатива опусканию chdir("/")
?
2 ответа
Вероятно, не следует писать в текущий каталог. Вместо этого лучше написать в какой-то конкретный каталог. Вместо того, чтобы перейти к /tmp
и запись файлов в текущий каталог, запись файлов в /tmp/whatever
Всегда использовать абсолютные пути.
И на связанной ноте, не жестко /tmp
если вы можете избежать этого. Сделайте это параметром конфигурации или используйте $TMPDIR
переменная окружения, или лучше всего, использовать mktemp()
,
Вы можете вызвать функцию daemon(3) (с ненулевым первым nochdir
аргумент), так что это демонизирует процесс, не делая chdir("/")
)
Но, как предлагает Джон Кугельман, вы не должны писать (или читать) какой-либо относительный путь в демонизированной программе (или вы должны сделать явный chdir
в каталог, который вы можете читать и писать и искать).