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ÅŸ:
Nasıl Python kullanırken çıkış kodu al...
Nasıl Python ile şimdiki zaman almak i...
Nasıl klon ya da Python içinde bir lis...
Nasıl dize Python küçük harfe dönüştür...
Nasıl Python stderr için baskı?...