2016-03-20 58 views
0

私は実行して別のpythonスクリプトを殺す単純なpythonサーバーを作成しようとしています。私が抱えている問題は、killコマンドがエラーなしに発行されますが、プロセスを強制終了しないということです。私は手動でkill -INT pidを試してみましたが、結果はありません。サブプロセスを強制終了する

このコマンドはシェルでは動作しますが、pythonでは動作しません。スクリプトがライトを制御し、kill -9がライトをオフにしないので、私は「ソフト」な殺しを行っています。

注:このスクリプトはyocto、競合製品で実行されている

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() 

'-l殺す' から出力:ので、あなたのコードは、希望@Peteshにより示唆されるように

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

実際に要求されたプロセスがリストされていることを確認するには 'ps'の生の出力をチェックし、[' os.kill'](https://docs.python.org/2/library/os .html#os.kill)、別のプロセスを生成するのではなく、プロセスを終了します。 – Petesh

答えて

1

がos.kill考えてみましょうこのような何かを見て:

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を抽出するために、次のことを考慮してください

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) 
関連する問題