Saya mencoba menghentikan proses (khususnya iChat). Pada baris perintah, saya menggunakan perintah ini:
ps -A | grep iChat
Kemudian:
kill -9 PID
Namun, saya tidak begitu yakin bagaimana menerjemahkan perintah ini ke Python.
Dengan asumsi Anda menggunakan platform mirip Unix (jadi itu ps -A
ada),
>>> import subprocess, signal
>>> import os
>>> p = subprocess.Popen(['ps', '-A'], stdout=subprocess.PIPE)
>>> out, err = p.communicate()
memberi Anda ps -A
output dalam out
variabel (string). Anda dapat memecahnya menjadi beberapa baris dan mengulanginya ...:
>>> for line in out.splitlines():
... if 'iChat' in line:
... pid = int(line.split(None, 1)[0])
... os.kill(pid, signal.SIGKILL)
...
(Anda dapat menghindari mengimpor signal
, dan menggunakan 9
alih-alih signal.SIGKILL
, tetapi saya hanya tidak terlalu menyukai gaya itu, jadi saya lebih suka menggunakan konstanta bernama dengan cara ini).
Tentu saja Anda dapat melakukan pemrosesan yang jauh lebih canggih pada jalur ini, tetapi ini meniru apa yang Anda lakukan di shell.
Jika yang Anda kejar adalah menghindari ps
, itu sulit dilakukan di berbagai sistem mirip Unix ( ps
adalah API umum mereka untuk mendapatkan daftar proses, dalam arti tertentu). Tetapi jika Anda hanya memikirkan sistem mirip Unix tertentu (tidak memerlukan portabilitas lintas platform), itu mungkin; khususnya, di Linux, sistem file /proc
semu sangat membantu. Tetapi Anda harus mengklarifikasi persyaratan persis Anda sebelum kami dapat membantu di bagian terakhir ini.
psutil dapat menemukan proses dengan nama dan membunuhnya:
sumber
psutil
paket, yang mungkin tidak ada di mesin target.Jika Anda harus mempertimbangkan kasus Windows untuk menjadi lintas platform, coba yang berikut ini:
sumber
Jika Anda memiliki killall:
Atau:
sumber
pkill
, meskipun saya pikir saya satu-satunya orang di dunia yang menggunakannya daripadakillall
killall java
?pkill
karena satu-satunya yangkillall
saya sadari adalah yang "bunuh semuanya".ini berhasil untuk saya di windows 7
sumber
Anda bisa mencobanya. tetapi sebelumnya Anda perlu menginstal psutil menggunakan
sudo pip install psutil
sumber
Kode di bawah ini akan mematikan semua program berorientasi iChat:
sumber
Anda dapat menggunakan
pkill <process_name>
sistem unix untuk menghentikan proses berdasarkan nama.Maka kode pythonnya adalah:
sumber
Jika Anda ingin menghentikan proses atau cmd.exe yang membawa judul tertentu.
Semoga membantu. Mungkin ada banyak solusi yang lebih baik untuk saya.
sumber
Anda dapat menggunakan modul WMI untuk melakukan ini di windows, meskipun itu jauh lebih kikuk daripada yang biasa Anda gunakan untuk unix;
import WMI
membutuhkan waktu lama dan ada rasa sakit menengah yang harus dihadapi dalam prosesnya.sumber
Bagi saya satu-satunya hal yang berhasil adalah:
Sebagai contoh
sumber
9 mewakili sinyal SIGKILL. Jadi Anda bisa menggunakan
KILL
di tempat 90r
sumber
sumber
Jawaban Alex Martelli tidak akan berfungsi di Python 3 karena
out
akan menjadi objek byte dan dengan demikian menghasilkanTypeError: a bytes-like object is required, not 'str'
saat pengujianif 'iChat' in line:
.Mengutip dari dokumentasi subproses :
Untuk Python 3, ini diselesaikan dengan menambahkan
text=True
(> = Python 3.7) atauuniversal_newlines=True
argumen kePopen
konstruktor.out
kemudian akan dikembalikan sebagai objek string.Alternatifnya, Anda dapat membuat string menggunakan metode decode () byte.
sumber
sumber