2016-03-20 18 views
0

Başka bir python komut dosyasını çalıştıran ve çalıştıran basit bir python sunucusu yazmaya çalışıyorum. Benim sahip olduğum problem, kill komutunun hatasız yayınlanması, ancak işlemi durdurmamasıdır. Herhangi bir sonuç olmadan 'kill -INT pid' ile manuel olarak denedim.Subprocess üzerinden öldürme yayımlama

Komut, kabukta değil, python'da çalışır. 'Yumuşak' bir öldürme yapıyorum çünkü senaryo bir ışığı kontrol ediyor ve 'kill -9' ışığı kapatmıyor.

NOT: komut yocto-Distr çalışıyorsa

import socket, subprocess 

srv = socket.socket() 
srv.bind(('', 1340)) 
srv.listen(3) 
while 1: 
    connection, address = srv.accept() 
    data = int(connection.recv(1024)) 
    if data == 0: 
     ps_id = subprocess.check_output('ps|grep python\ /home/root/python/backlight_mod.py', shell=True) 
     ps_id = ps_id.split(' ')[2] 
     subprocess.call('kill -INT ' + str(ps_id), shell=True) 
     print 'Terminated' 
    elif data == 1: 
     subprocess.call('python ~/python/backlight_mod.py &', shell=True) 
    connection.close() 

kill -l çıktısı: böylece kod olur @Petesh önerdiği gibi

HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS RTMIN RTMIN+1 RTMIN+2 RTMIN+3 RTMIN+4 RTMIN+5 RTMIN+6 RTMIN+7 RTMIN+8 RTMIN+9 RTMIN+10 RTMIN+11 RTMIN+12 RTMIN+13 RTMIN+14 RTMIN+15 RTMAX-14 RTMAX-13 RTMAX-12 RTMAX-11 RTMAX-10 RTMAX-9 RTMAX-8 RTMAX-7 RTMAX-6 RTMAX-5 RTMAX-4 RTMAX-3 RTMAX-2 RTMAX-1 RTMAX 
+0

İstenen işlemi gerçekten listelediğinden ve ['os.kill'] (https://docs.python.org/2/library/os) kullandığından emin olmak için' ps''nin ham çıktısını kontrol etmelisiniz. .html # os.kill) işlemi başka bir süreç oluşturmaktan ziyade sona erdirmek için. – Petesh

cevap

1

os.kill düşünün şuna benzer:

Ayrıca
if data == 0: 
    ps_id = subprocess.check_output('ps|grep python\ /home/root/python/backlight_mod.py', shell=True) 
    ps_id = ps_id.split(' ')[2] 
    os.kill(pid, 3) 
    print 'Terminated' 

pid ayıklamak için aşağıdakileri dikkate alın:

p = subprocess.Popen(['ps', '-A'], stdout = subprocess.PIPE) 
out, err = p.communicate() 

for process in out.splitlines(): 
    if 'backlight_mod.py' in process: 
    pid = int(process.split(None, 1)[0]) 
    os.kill(pid, 3) 
İlgili konular