MCPcopy Create free account
hub / github.com/dim-an/cod / daemonize

Function daemonize

daemon.go:169–217  ·  view source on GitHub ↗
(config *server.Configuration)

Source from the content-addressed store, hash-verified

167}
168
169func daemonize(config *server.Configuration) (err error) {
170 checkDaemonIsRunning := func() (isRunning bool, err error) {
171 var fd int
172 fd, err = unix.Open(config.GetLockFile(), os.O_RDONLY, 0600)
173 if errors.Is(err, os.ErrNotExist) {
174 err = nil
175 isRunning = false
176 return
177 } else if err != nil {
178 return
179 }
180
181 defer func() {
182 err = unix.Close(fd)
183 }()
184 err = unix.Flock(fd, unix.LOCK_EX|unix.LOCK_NB)
185 if errors.Is(err, unix.EWOULDBLOCK) {
186 err = nil
187 isRunning = true
188 return
189 } else if err != nil {
190 return
191 }
192 isRunning = false
193 err = unix.Flock(fd, unix.LOCK_UN)
194 return
195 }
196
197 var isRunning bool
198 isRunning, err = checkDaemonIsRunning()
199 if err != nil {
200 return
201 }
202 if isRunning {
203 return
204 }
205
206 var executable string
207 executable, err = os.Executable()
208 if err != nil {
209 return
210 }
211 cmd := exec.Command(executable, "daemon")
212 err = cmd.Run()
213 if err != nil {
214 err = fmt.Errorf("\"%s daemonize\" error: %w", executable, err)
215 }
216 return
217}

Callers 2

initMainFunction · 0.85
shellApiAttachMainFunction · 0.85

Calls 2

GetLockFileMethod · 0.80
CloseMethod · 0.65

Tested by

no test coverage detected