2016-06-21 8 views
-3

私は一度に(Linuxで)もっと多くのプレーヤープログラムを実行する必要がありますが、サブプロセスごとに別々に実行したいのです。だから、私はそれを開始するときに各プレーヤーのプロセスに "ラベル"を追加するようなものを考えています。プレイヤー「1」、プレイヤー「2」、プレイヤー「3」、プレイヤー「3」、プレイヤー「3」を選択し、サブプロセスを呼び出してプレイヤー「3」のすべてのインスタンスを終了させたい。"label"でプロセスを殺すための "label"

これを行う方法?

+0

※複数のプレーヤープログラムを一度に*意味しますか? –

+0

subprocess.popen経由でさらに多くのインスタンスを実行する – peter

答えて

0

すべてのラベルが一意の場合は、ラベルをキーとしてpopenインスタンスを辞書に保存するだけです。

import subprocess 
process_dict = {} 

def startNewProcess(command, label): 
    p = subprocess.Popen(command, shell=True) 
    process_dict[label] = p 

def killProcess(label): 
    if label in m_process_dict: 
     p = process_dict.pop(label) 
     p.terminate() 



プロセスのラベルは一意ではないだろうか、プロセスごとに複数のラベルを持つようにしたい場合は、リストを使用して処理して、ラベルの両方を保存する方が良いかもしれ場合。

import subprocess 
process_list = {} 

def startNewProcess(command, labels): 
    p = subprocess.Popen(command, shell=True) 
    process_list.append({'process':p, 'labels':labels}) 

def killProcess(label): 
    for ii, entry in enumerate(process_list): 
     if label in entry['labels']: 
      entry['process'].terminate() 
      process_list.remove(ii) 
+0

ありがとう!これはそれを解決する必要があるように見えます。 – peter