Nasıl python bir alt süreci=True kabuğu ile başlatılan sonlandırmak için | Netgez.com
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

  • Electro Posé

    Electro PosÃ

    21 ÅžUBAT 2013
  • J Medema

    J Medema

    11 EKÄ°M 2006
  • Paul Schroder

    Paul Schrode

    30 Kasım 2007