Execute netstat and kill as the right user in runsics.py.
Also reduced feedback whent start, stopping and checking SICS status.
This commit is contained in:
@ -37,8 +37,8 @@ inst_test_sockoffset = {
|
||||
deflt_dir = '/usr/local/sics/server'
|
||||
deflt_sockoffset = 'none'
|
||||
deflt_user = inst_user
|
||||
sics_killer = 'root'
|
||||
sics_checker = inst_user
|
||||
sics_killer = inst_user
|
||||
sics_checker = 'root'
|
||||
if os.environ.has_key('TEST_SICS'):
|
||||
deflt_test = os.environ['TEST_SICS']
|
||||
else:
|
||||
@ -50,7 +50,7 @@ def sics_preexec():
|
||||
|
||||
# TODO Launch simulated devices if TEST_SICS=fakedev. Must write launch script first.
|
||||
def start_cmd(server, args):
|
||||
if status_cmd(server, args):
|
||||
if status_fn(server, args) != (0,0):
|
||||
print '%s is already running. Cowardly refusing to launch it twice' % server
|
||||
return
|
||||
if (args.sockoffset != 'none'):
|
||||
@ -80,64 +80,71 @@ def start_cmd(server, args):
|
||||
|
||||
def stop_cmd(server, args):
|
||||
INTMSG = 'SICSINT 6'
|
||||
ret = status_cmd(server, args)
|
||||
if ret:
|
||||
(serv_port, pid) = ret
|
||||
(serv_port, pid) = status_cmd(server, args)
|
||||
if pid:
|
||||
if (args.sockoffset == 'none'):
|
||||
int_port = server_port[server]['interrupt']
|
||||
else:
|
||||
int_port = server_port[server]['interrupt'] + inst_test_sockoffset[args.sockoffset]
|
||||
print 'STOP %s(%d) listening on %d' % (server, pid, serv_port)
|
||||
print "Sending '%s' to %d" % (INTMSG, int_port)
|
||||
print "STOP %s(%d) by sending '%s' to socket %d" % (server, pid, INTMSG, int_port)
|
||||
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
sock.sendto( INTMSG + '\n\r', ('localhost', int_port) )
|
||||
sock.close()
|
||||
if status_cmd(server, args):
|
||||
if status_cmd(server, args) != (0,0):
|
||||
sys.stdout.write('Waiting ')
|
||||
for n in range(3):
|
||||
print 'Waiting'
|
||||
sys.stdout.write('.')
|
||||
time.sleep(1)
|
||||
if status_cmd(server, args):
|
||||
if status_fn(server, args) != (0,0):
|
||||
continue
|
||||
else:
|
||||
break
|
||||
print ''
|
||||
if status_cmd(server, args):
|
||||
else:
|
||||
return
|
||||
if status_fn(server, args) != (0,0):
|
||||
print 'Failed to stop %s' % server
|
||||
print "Fragging PID %d with default KILL" % (pid)
|
||||
subprocess.call(shlex.split('sudo -u %s /bin/kill %d' % (sics_killer, pid)))
|
||||
else:
|
||||
return
|
||||
if status_cmd(server, args):
|
||||
if status_fn(server, args) != (0,0):
|
||||
print 'Failed again!'
|
||||
print "Terminating PID %d with EXTREME PREJUDICE (-15)" % (pid)
|
||||
subprocess.call(shlex.split('sudo -u %s /bin/kill -15 %d' % sics_killer, (pid)))
|
||||
else:
|
||||
return
|
||||
if status_cmd(server, args):
|
||||
if status_cmd(server, args) != (0,0):
|
||||
print 'Why wont you die, Powers!!??'
|
||||
print 'I give up. Try calling a SICS programmer or sysadmin'
|
||||
|
||||
|
||||
def status_cmd(server, args):
|
||||
def status_fn(server, args):
|
||||
if (args.sockoffset == 'none'):
|
||||
sock = server_port[server]['server']
|
||||
else:
|
||||
sock = server_port[server]['server'] + inst_test_sockoffset[args.sockoffset]
|
||||
status_cmd = 'sudo -u %s netstat -nltp' % sics_checker
|
||||
netstat_str, err = subprocess.Popen(shlex.split(status_cmd), stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
|
||||
status_str = 'sudo -u %s netstat -nltp' % sics_checker
|
||||
netstat_str, err = subprocess.Popen(shlex.split(status_str), stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
|
||||
# ffr: We can replace the previous Popen().communicate() line with the following two lines if Python is upgraded to V2.7
|
||||
# with open(os.devnull) as fp:
|
||||
# netstat_str = subprocess.check_output(shlex.split(status_cmd), stderr=fp)
|
||||
# netstat_str = subprocess.check_output(shlex.split(status_str), stderr=fp)
|
||||
#
|
||||
#Find PID of SICServer listening on server port
|
||||
m = re.search(':%d .* (\d+)\/SICServer' % sock, netstat_str)
|
||||
if m:
|
||||
pid = int(m.group(1))
|
||||
print '%s listening on port %d, PID=%d' % (server, sock, pid)
|
||||
return (sock, pid)
|
||||
else:
|
||||
return (0,0)
|
||||
|
||||
def status_cmd(server, args):
|
||||
(sock,pid) = status_fn(server, args)
|
||||
if pid:
|
||||
print '%s listening on port %d, PID=%d' % (server, sock, pid)
|
||||
else:
|
||||
print '%s not running' % server
|
||||
return ''
|
||||
return (sock, pid)
|
||||
|
||||
def main(**kwargs):
|
||||
global sics_killer, sics_checker
|
||||
|
Reference in New Issue
Block a user