# cat log.smbd
[2009/08/15 00:00:07,  0] lib/pidfile.c:121(pidfile_create)
  ERROR: smbd is already running. File /usr/local/samba/var/locks/smbd.pid exists and process id 687 is running.

삼바가 구동중에 제대로 종료되지 않고 재가동 될경우
$PIDDIR/smbd.pid
$PIDDIR/nmbd.pid

파일이 남아 있다 보면, 위와 같이 이미 구동중으로 착각을 하고
smbd나 nmbd를 구동하는데 실패를 한다.

fork() / execl() 로 구동시에는
waitpid() 에서 벗어 나지 못하고 멈추는 현상이 발생했다.





결론 : 혹시 모르니 종료가 불확실한 시스템(임베디드?)에서는 삼바 구동 이전에 pid 파일을 지워주도록 하는게 좋을듯 하다.
Posted by 구차니
Linux2009. 11. 20. 13:49
#include <sys/param.h>
#include <libutil.h>

struct pidfh *pidfile_open(const char *path, mode_t mode, pid_t *pidptr);
int pidfile_write(struct pidfh *pfh);
int pidfile_close(struct pidfh *pfh);
int pidfile_remove(struct pidfh *pfh);

[링크 : http://fuse4bsd.creo.hu/localcgi/man-cgi.cgi?pidfile+3]


데몬들은 서비스 관리를 위해서 pid 파일을 가지고 있다.
이녀석은 열어 보면, 단순하게 pid를 %d 로 출력한 내용뿐인데,
일일이 열어서 읽고, atoi 돌리기 귀찮아서 검색을 해보니 pidfile 이라는 함수 패밀리가 있었다.

음. 그런데 die.net에 없는거 보면.. 표준 함수는 아닌건가?
FC6에도 존재하지 않는 함수 -ㅁ-

사족 : 음.. 아마도.. Linux가 아니라 Freebsd Man page 라서 인가?
Posted by 구차니