Làm thế nào để Windows giết một quá trình, chính xác?


10

Tôi không quen với cách các tiến trình bị giết trong Windows. Trong Linux, tiêu diệt "ấm" sẽ gửi tín hiệu (15) mà quá trình có thể xử lý bằng cách khởi tạo trình xử lý tín hiệu. Giết lạnh là tín hiệu (9) mà HĐH xử lý bằng cách giết quá trình một cách mạnh mẽ.

Làm thế nào tôi có thể "giết" một tiến trình trong Windows? Làm thế nào nó được xử lý bởi hệ điều hành và quá trình? HĐH thực hiện những hành động nào? Có cách nào đa nền tảng để đáp ứng yêu cầu giết / đóng không?


1
Đối với độc giả: Tín hiệu 15 là SIGTERM, 9 là SIGKILL.
dùng1686

Hãy chấp nhận một câu trả lời, nếu câu hỏi của bạn đã được trả lời.
Oliver

Câu trả lời:


11

"Nhiệm vụ kết thúc" (và taskkill) xuất hiện để gửi WM_CLOSEthông báo lên cửa sổ của chương trình. (Điều tương tự cũng được thực hiện khi bạn nhấp vào nút ×"Đóng".) Nếu chương trình không thoát ra trong một thời gian, người dùng sẽ được nhắc kết thúc chương trình một cách mạnh mẽ.

"Kill Process" và taskkill /fsử dụng TerminateProcess().


1
+1, WM_CLOSE được gửi đến ứng dụng; Sau khi X yêu cầu người dùng buộc giết, Windows sẽ loại bỏ tiến trình khỏi bộ lập lịch, đóng tất cả các tay cầm (có thể làm tăng quá trình nếu kernel đang xử lý một trong các tay cầm đó), sau đó lấy lại không gian bộ nhớ (đây là phiên bản thực sự ngắn của quá trình).
Chris S

Cách thứ ba là ntsd -p <pid> -c q, sử dụng ntsdtrình gỡ lỗi; Tôi không chắc điều gì sẽ xảy ra khi một chương trình bị giết theo cách đó. ( chọc
@Chris

5
Điều gì xảy ra nếu chương trình không có cửa sổ?
IttayD

1
@IttayD: Sau đó, không có mục nào trong Trình quản lý tác vụ để sử dụng "Kết thúc tác vụ" trên :) Tôi vừa thử taskkillvà nó trả lời: "Quá trình này chỉ có thể bị chấm dứt mạnh mẽ (với tùy chọn / F)." Vì vậy, yeah, sự lựa chọn duy nhất còn lại là TerminateProcess().
dùng1686

1
@IttayD: Lưu ý rằng trên Windows, các dịch vụ (trình nền) được viết khác với các ứng dụng của người dùng; họ có thể nhận được các truy vấn trạng thái và yêu cầu kiểm soát từ Trình quản lý dịch vụ, do đó, một điểm dừng duyên dáng là có thể.
dùng1686

0

Sysiternals (hiện là một phần của Microsoft) cung cấp một tiện ích gọi là pskill có thể được sử dụng từ dòng lệnh để tiêu diệt các tiến trình trên hệ thống cục bộ hoặc trên các hệ thống từ xa.

Cách thông thường để tiêu diệt các tiến trình trong Windows trong môi trường GUI là sử dụng Trình quản lý tác vụ.


-1

với cygwin bạn có thể sử dụng giết nền tảng chéo!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.