1 # Author: Martin Matusiak <numerodix@gmail.com>
2 # Licensed under the GNU Public License, version 3.
11 from conf
import config
12 from output
import logger
20 process
= popen2
.Popen3(cmd
, True)
21 sout
= process
.fromchild
22 serr
= process
.childerr
24 return (code
, sout
, serr
)
27 #logger.display("+ " + cmd, log=False)
28 logger
.log("+ %s" % cmd
)
29 (code
, sout
, serr
) = execute(cmd
)
32 e
= serr
.read().strip()
39 def kill_by_name(proc
):
40 cmd
= "%s %s" % (config
.pgrep
, os
.path
.basename(proc
))
41 out
= run(cmd
).strip()
42 deadline
= time
.time()+0.3
43 while out
and time
.time() < deadline
:
44 pids
= string
.split(out
, "\n")
49 logger
.err("Cast of pid int('%s') for process '%s' failed" % (p
, proc
))
52 os
.kill(pid
, signal
.SIGINT
)
53 os
.kill(pid
, signal
.SIGTERM
)
54 os
.kill(pid
, signal
.SIGKILL
)
56 logger
.err("Failed to kill process '%s' pid %d" % (proc
, pid
))
58 out
= run(cmd
).strip()
60 def kill_previous_instances():
61 pids
= system
.getfile(config
.pidfile
).strip().split("\n")
62 if not [x
for x
in pids
if x
!= ""]: return
65 try: f
= open(config
.pidfile
, 'w'); f
.close()
67 logger
.err("Could not truncate pidfile %s" % config
.pidfile
, log
=False)
71 out
= run("%s %s" % (config
.ps
, pid
))
72 active
= regex
.find1("(%s)" % config
.program_name
, out
)
74 os
.kill(pid
, signal
.SIGINT
)
75 os
.kill(pid
, signal
.SIGTERM
)
76 os
.kill(pid
, signal
.SIGKILL
)
80 f
= open(config
.pidfile
, 'a')
81 f
.write("%s\n" % os
.getpid())
84 logger
.err("Could not write to pidfile %s" % config
.pidfile
, log
=False)
90 if pid
> 0: sys
.exit(0)
92 logger
.err("Failed to daemonize", log
=False)
98 child_in
=open('/dev/null','r')
99 child_out
=open('/dev/null','w')
100 os
.dup2(child_in
.fileno(), sys
.stdin
.fileno())
101 os
.dup2(child_out
.fileno(), sys
.stdout
.fileno())
102 os
.dup2(child_out
.fileno(), sys
.stderr
.fileno())
106 if pid
> 0: sys
.exit(0)
108 logger
.err("Failed to daemonize", log
=False)