Bagaimana cara Windows membunuh suatu proses, tepatnya?

10

Saya tidak terbiasa dengan bagaimana proses dibunuh di Windows. Di Linux, kill "warm" mengirimkan sinyal (15) yang dapat ditangani oleh proses dengan membuat pengendali sinyal. Pembunuhan dingin adalah sinyal (9) yang ditangani oleh OS dengan mematikan proses dengan paksa.

Bagaimana saya bisa "membunuh" suatu proses di Windows? Bagaimana ini ditangani oleh OS dan oleh proses? Tindakan apa yang dilakukan OS? Apakah ada cara lintas platform untuk menanggapi permintaan penutupan / tutup?

IttayD
sumber
1
Untuk pembaca: Sinyal 15 adalah SIGTERM, 9 adalah SIGKILL.
user1686
Harap terima jawaban, jika pertanyaan Anda telah dijawab.
Oliver

Jawaban:

11

"End Task" (dan taskkill) muncul untuk mengirim WM_CLOSEpesan ke jendela program. (Hal yang sama dilakukan ketika Anda mengklik tombol ×"Tutup".) Jika program tidak keluar dalam beberapa waktu, pengguna akan diminta untuk mengakhiri program dengan paksa.

"Bunuh Proses" dan taskkill /fgunakan TerminateProcess().

pengguna1686
sumber
1
+1, WM_CLOSE dikirim ke aplikasi; setelah X kali meminta pengguna untuk dipaksa membunuh, Windows menghapus proses dari penjadwal, menutup semua pegangan (yang dapat mempercepat proses jika kernel memproses salah satu dari pegangan itu), kemudian mengambil kembali ruang memori (ini adalah versi yang sangat singkat) dari proses).
Chris S
Cara ketiga adalah ntsd -p <pid> -c q, yang menggunakan ntsddebugger; Saya tidak yakin apa yang terjadi ketika sebuah program terbunuh seperti itu. ( pokes
@Chris
5
apa yang terjadi jika program tidak memiliki jendela?
IttayD
1
@IttayD: Lalu tidak ada entri di Pengelola Tugas untuk menggunakan "Akhiri Tugas" pada :) Saya baru saja mencoba taskkilldan menjawab dengan: "Proses ini hanya dapat dihentikan secara paksa (dengan opsi / F)." Jadi ya, satu-satunya pilihan yang tersisa adalah TerminateProcess().
user1686
1
@IttayD: Perhatikan bahwa pada Windows, layanan (daemon) ditulis berbeda dari aplikasi pengguna; mereka dapat menerima permintaan status dan mengontrol permintaan dari Manajer Layanan, sehingga berhenti dengan anggun dimungkinkan.
user1686
0

Sysinternals (sekarang bagian dari Microsoft) menawarkan utilitas yang disebut pskill yang dapat digunakan dari baris perintah untuk mematikan proses pada sistem lokal atau pada sistem jarak jauh.

Cara biasa untuk mematikan proses di Windows dalam lingkungan GUI adalah dengan menggunakan Task Manager.

Dijeda sampai pemberitahuan lebih lanjut.
sumber
-1

dengan cygwin Anda bisa menggunakan cross platform kill!

tony roth
sumber