2012-10-20 7 views
0

콘솔에서 시작할 때 잘 작동하는 프로그램 (Crafty chess)이 있습니다. 내 응용 프로그램에 대한 나는 그것을 daemonized있다. 프로세스를 대몬화할 때 chdir("/")을 통해 작업 디렉토리를 "/"로 변경해야합니다.리눅스 데몬 : chdir ("/") 대신 사용할 수 있습니까?

해당 조언을 ​​따르면 "/"에 적절한 사용 권한이 없기 때문에 프로그램이 일부 사용 사례에서 종료됩니다. 내가 chdir이 아니라면, 프로그램은 작동하지만, 그냥 chdir을 버리는 것은 버팀목입니다.

chdir("/")을 생략하는 대신 소리가 나나요?

+0

chdir ("/") 실행에 대한 조언을 얻을 수있는 출처를 인용 할 수 있습니까? 이것이 여러 가지 이유에서 좋은 아이디어인지 의심 스럽습니다. –

+1

"적절한 사용 권한이 없다"는 것은 무엇을 의미합니까? 무슨 일이야? 작동하지 않는 것은 무엇입니까? –

+0

@RobKielty http://www.itp.uzh.ch/~dpotter/howto/daemonize를 참조하십시오. "이것은 현재 디렉토리가 잠기는 것을 방지하므로 제거 할 수 없습니다." –

답변

3

아마도 현재 디렉토리에 쓰지 않아야합니다. 대신 특정 디렉토리에 작성하는 것이 좋습니다. /tmp으로 cd'ing하고 현재 디렉토리에 파일을 쓰는 대신 /tmp/whatever —에 파일을 쓰십시오. 즉, 절대 경로를 사용하십시오.

그리고 관련 메모에서 피해야 할 경우 /tmp을 하드 코드하지 마십시오. 구성 옵션으로 만들거나 $TMPDIR 환경 변수를 사용하거나 가장 좋은 방법은 mktemp()을 사용하십시오. 그것은 chdir("/"))

그러나 존 Kugelman에서 알 수 있듯이, 당신이 쓰는 안된다을하지 않고 프로세스를 디먼 화 (도 읽을 수 있도록

0

당신은) 어떤 (비 제로 첫째 nochdir 인수 포함) daemon(3) 함수를 호출 할 수 있습니다 상대 경로를 사용하거나 읽기 및 쓰기가 가능한 디렉토리에 명시적인 chdir을 지정해야합니다.

관련 문제