SORU
25 Ocak 2011, Salı


Nasıl python bir alt süreci=True kabuğu ile başlatılan sonlandırmak için

Aşağıdaki komutu ile bir alt işlemi başlatıyorum:

p = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)

Kullanarak öldürmeye çalışıyorum, ancak:

p.terminate()

ya

p.kill()

Komut bu yüzden merak ediyorum arka planda çalışan, aslında süreci nasıl iptal edebilirim tutar.

Komutu çalıştırdığımda: unutmayın

p = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE)

p.terminate() verilirken başarıyla sona erdirmek.

CEVAP
25 Ocak 2011, Salı


Gruplar tüm süreç için bir sinyal göndermeyi etkinleştirmek için process group kullanın. Bunun için, senin durumunda bir kabuk session id oluşturulan/ana süreç alt süreçler, ekleyiniz. Bu süreçlerin grup lideri yapacak. Bir sinyal işlem grup lideri gönderildiğinde, bu grubun alt süreçlerin hepsine bulaşıyor.

İşte kod:

import os
import signal
import subprocess

# The os.setsid() is passed in the argument preexec_fn so
# it's run after the fork() and before  exec() to run the shell.
pro = subprocess.Popen(cmd, stdout=subprocess.PIPE, 
                       shell=True, preexec_fn=os.setsid) 

os.killpg(pro.pid, signal.SIGTERM)  # Send the signal to all the process groups

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bratayley

    Bratayley

    30 Aralık 2010
  • ThreadBanger

    ThreadBanger

    2 Mart 2007
  • tunez4you

    tunez4you

    20 EKİM 2008