0

Python スクリプト:

import os
import subprocess
import threading
import sys
command= sys.argv[1:]
command=" ".join(command)


def readValue():
    print 'start receive command'
    while True:
        msg=raw_input()
        print 'msg received: %s' % msg
        if 'kill'==msg:
            os.killpg(os.getpgid(p.pid),9)

newThread = threading.Thread(target = readValue, name = "readingThread" )
newThread.setDaemon(1)
newThread.start()

p=subprocess.Popen(command,shell=True,preexec_fn=os.setpgrp)
p.wait()

exitCode=p.poll()
sys.exit(exitCode)

スクリプトを bash で実行する

python script.pyスリープ100

kill文字列を入力すると、プロセスの成功が殺されました

しかし、Javaでスクリプトを実行すると

Runtime runtime = Runtime.getRuntime();
Process process=runtime.exec("python script.py sleep 100");
Thread.sleep(1000);
process.getOutputStream().write("kill\n".getBytes());
process.waitFor();

Python の newThread が実行されていないようで、スレッドがkill文字列を受信して​​いない

なぜこれがうまくいかないのか誰にも教えてもらえますか?または、すべてのサブプロセスを強制終了する os.setpgrp や os.killpg のような他の方法がありますか

OS: ubuntu 12.04
カーネル: 3.2.0-37-generic
Java: 1.6.0_34
Python: 2.7.3

4

1 に答える 1

0

追加してみてください:

process.getOutputStream().flush();

または、別のアプローチ:

PrintWriter outputWriter = new PrintWriter(process.getOutputStream(),true);
outputWriter.println("kill");
于 2013-02-22T13:34:35.980 に答える