Thực sự giết chết một quá trình trong Windows


375

Thỉnh thoảng một chương trình trên máy Windows phát điên và chỉ bị treo. Vì vậy, tôi sẽ gọi trình quản lý tác vụ và nhấn nút "Kết thúc quá trình" cho nó. Tuy nhiên, điều này không phải lúc nào cũng hoạt động; Nếu tôi thử nó đủ lần thì cuối cùng nó sẽ chết, nhưng tôi thực sự muốn có thể giết nó ngay lập tức. Trên Linux tôi chỉ có thể kill -9đảm bảo rằng một quy trình sẽ chết.

Điều này cũng có thể được sử dụng để viết tập lệnh bó và viết tập lệnh bó đang lập trình.

Có một số chương trình hoặc lệnh đi kèm với Windows sẽ luôn giết một tiến trình không? Một ứng dụng của bên thứ ba miễn phí sẽ ổn, mặc dù tôi muốn có thể làm điều này trên các máy tôi ngồi lần đầu tiên.


19
Các quy trình đi lạc là một vấn đề đủ phổ biến trong lập trình mà tôi phải không đồng ý; đây không phải là một câu hỏi ngoài chủ đề
Dan Mould

19
Tôi đối phó với quản lý quy trình mỗi ngày như một nhà phát triển. Đây là chủ đề hoàn toàn ON cho tôi!
John Fitzpatrick

14
Tôi khuyên bạn không nên xóa câu hỏi này. +195 và đó là một hit thực sự sớm của google cho câu hỏi liên quan.
Joshua

2
"Trừ khi chúng liên quan trực tiếp đến các công cụ được sử dụng chủ yếu để lập trình" Tôi gặp phải vấn đề này liên quan đến Visual Studio giữ cho một quá trình hoạt động khiến tôi không thể giết nó. Đóng Visual Studio đã giúp tiêu diệt quá trình có vấn đề.
Joakim

Câu trả lời:


318

"Kết thúc quá trình" trên các lệnh gọi Processes-Tab TerminateProcess, đó là cách tối ưu nhất mà Windows biết để giết một tiến trình.

Nếu nó không biến mất, hiện tại nó đang bị khóa chờ trên một số tài nguyên kernel (có thể là trình điều khiển lỗi) và không có gì (thiếu khởi động lại) mà bạn có thể làm để làm cho quá trình biến mất.

Hãy xem mục blog này từ wayback khi: http://bloss.technet.com/markrussinovich/archive/2005/08/17/unkillable- Processes.aspx

Các hệ thống dựa trên Unix như Linux cũng gặp phải vấn đề đó khi các quá trình có thể tồn tại kill -9nếu chúng ở trạng thái được gọi là "Giấc ngủ không bị gián đoạn" (được hiển thị bởi trạng thái trên cùng và ps D), tại đó các quy trình ngủ tốt đến mức chúng không thể xử lý tín hiệu đến (đó là những gì killkhông - gửi tín hiệu).

Thông thường, giấc ngủ không bị gián đoạn không nên kéo dài, nhưng như trong Windows, trình điều khiển bị hỏng hoặc chương trình vforkkhông gian người dùng bị hỏng ( không có exec) có thể sẽ ngủ Dmãi mãi.


29
Mặc dù tôi ghét rằng đây là câu trả lời chính xác, nhưng không có nghi ngờ gì trong đầu tôi rằng nó đúng hơn nhiệm vụ dưới đây .... trình điều khiển lỗi ngu ngốc!
codetaku

6
Ít gây phiền nhiễu hơn so với khởi động lại là đăng xuất / bật lại. Vẫn mất việc, nhưng có lẽ không quá nhiều thời gian.
khủng khiếp

8
đó là do một số quy trình khác gây ra, đảm bảo quy trình ban đầu luôn chạy. Bạn đã giết cá thể cũ của bạn và một cá thể mới đã được bắt đầu bởi cơ quan giám sát
pilif

8
Câu trả lời này không đúng chút nào. "Quá trình kết thúc" không phải là cách cuối cùng để tiêu diệt các quy trình, vì nó không thể giết các quy trình dịch vụ (ví dụ). taskkill /flà cuối cùng
dùng626528

5
TaskKill / f chỉ gọi TerminateProcessAPI. Nó thực hiện chính xác giống như Trình quản lý tác vụ (mặc dù, bạn đúng về điều đó, với các đặc quyền nâng cao).
pilif

233
taskkill /im myprocess.exe /f

"/ F" là "lực lượng". Nếu bạn biết PID, thì bạn có thể chỉ định điều đó, như trong:

taskkill /pid 1234 /f

Rất nhiều tùy chọn khác là có thể, chỉ cần gõ taskkill /? cho tất cả bọn họ Tùy chọn "/ t" giết chết một tiến trình và bất kỳ tiến trình con nào; Điều đó có thể hữu ích cho bạn.


10
Chỉ cần một lưu ý. Điều này đặc biệt hữu ích nếu bạn đang viết các kịch bản để quản lý máy chủ. kill.exe (từ bộ NT Res) sẽ khiến chương trình thoát ra, nhưng nếu bạn đã cài đặt trình xử lý sự cố (đặc biệt là Windbg), nó có thể gây ra sự cố vì HĐH sẽ thấy quá trình bị giết là bị lỗi và cố gắng gỡ lỗi nó Taskkill sẽ không dẫn đến vấn đề này.
Aaron

6
@lzprgmr - taskkill và "nhiệm vụ cuối cùng" có lẽ cả hai gọi các cửa sổ nằm bên dưới cùng chức năng "TerminateProcess" msdn.microsoft.com/en-us/library/windows/desktop/...
JosephStyons

60
Điều này không còn hiệu quả sau đó "kết thúc quá trình" từ trình quản lý tác vụ.
Eddie

2
Tôi đã cố gắng giết SugarSync.exe một cách mạnh mẽ mà không phải khởi động lại (kể từ khi khởi động lại SugarSync hai lần trước khi nó thực sự hoạt động trở lại), nhưng taskkill / T / F / IM SugarSync.exe không hoạt động - mặc dù nó tuyên bố "THÀNH CÔNG"
Jon Coombs

2
CẢM ƠN BẠN! taskkill /pid 1234 /fkhông hoạt động khi End Task từ chối làm việc! Ôi!
Hendy I Girls

37

Process Hacker có rất nhiều cách để giết một tiến trình.

(Nhấp chuột phải vào quy trình, sau đó chuyển đến Khác-> Kẻ hủy diệt.)


5
Không thể tìm thấy nhiều trong cách ăn mòn, vì tìm kiếm này chỉ mang lại hàng triệu TẢI XUỐNG MIỄN PHÍ !!! liên kết. Nhưng nó làm những gì nó nói, rủi ro virus và tất cả.
bwerks

2
@Nuzzolilo: Chắc chắn rồi! Nhấp chuột phải vào quá trình, đi đến Khác-> Kẻ hủy diệt.
dùng541686

6
Không hoạt động trên tất cả các quy trình, tôi có một cái tồn tại trong tất cả các tùy chọn.
Zitrax

7
Nó làm mờ màn hình máy tính của tôi. Quá trình đã biến mất sau khi khởi động lại. Làm tốt lắm ... -.- '
Pedro Oliveira

5
Thật không may Terminator bị xóa trong v2,39 :(
raymai97

23

JosepStyons đã đúng. Mở cmd.exe và chạy

taskkill /im processname.exe /f

Nếu có lỗi nói,

LRI: Không thể kết thúc quá trình "process.exe" với PID 1234. Lý do: Truy cập bị từ chối.

sau đó thử chạy cmd.exe với tư cách quản trị viên.


9
Chạy với tư cách quản trị viên, lỗi thay đổi. Bây giờ nó nói: ERROR: The process with PID 17888 (child process of PID 17880) could not be terminated. Reason: There is no instance of the task.và nó đang đề cập đến cha mẹ PID 17880. Vì không thể tìm thấy cha mẹ, nó sẽ không giết đứa trẻ mồ côi. :(
Jesse Chisholm

1
"bạn cũng phải giết quá trình con nếu bất kỳ sinh ra để giết thành công quá trình của bạn" hãy thử stackoverflow.com/questions/12528963/
trộm

Trong trường hợp của tôi, quá trình zombie mà tôi bảo nó giết là đứa trẻ duy nhất và không có cha mẹ, mặc dù zombie vẫn nghĩ rằng nó có bố mẹ. Trong trường hợp của tôi, đã giải quyết bằng cách sử dụng đường dẫn Hệ thống sửa chữa nâng cao Windows 8.1, nhưng hủy bỏ thực sự xóa sạch bất kỳ đĩa nào và chỉ thực hiện khởi động lại bắt buộc hoàn toàn. Việc tắt và khởi động lại thường xuyên thực sự là ngủ / ngủ đông (để tiết kiệm thời gian khởi động). Không tầm thường làm cho nó phải tắt máy hoàn toàn .
Jesse Chisholm

"Truy cập bị từ chối" có nghĩa là quá trình này đang trong quá trình đóng. Ví dụ, nếu bạn vừa cố gắng đóng nó sớm hơn. Bạn sẽ cần đợi cho đến khi nó được đóng lại.
Pacerier

kết quả tác vụ theo quyền quản trị viên: Quyền truy cập bị từ chối.
đặc biệt

22

Nhận trình thám hiểm quy trình từ sysiternals (nay là Microsoft)

Process Explorer - Windows Sysiternals | Tài liệu Microsoft


15
Điều đó cung cấp thêm thông tin (và một số khả năng hạn chế để tìm kiếm khóa tay cầm) nhưng tôi không có nhiều thành công hơn trong việc tiêu diệt các tác vụ với nó so với Trình quản lý tác vụ cơ bản. Một số quy trình (như chống vi-rút và SugarSync.exe) chỉ cần từ chối chết.
Jon Coombs

15

Một mẹo hoạt động tốt là đính kèm trình gỡ lỗi và sau đó thoát khỏi trình gỡ lỗi.

Trên XP hoặc Windows 2003, bạn có thể thực hiện việc này bằng cách sử dụng ntsd.

ntsd -pn myapp.exe

ntsd sẽ mở ra một cửa sổ mới. Chỉ cần gõ 'q' trong cửa sổ để thoát trình gỡ lỗi và xử lý.

Tôi đã biết điều này để làm việc ngay cả khi trình quản lý tác vụ dường như không thể giết chết một quy trình.

Thật không may, ntsd đã bị xóa khỏi Vista và bạn phải cài đặt các công cụ gỡ lỗi (miễn phí) cho windows để có được trình gỡ lỗi phù hợp.


1
Cám ơn bạn rất nhiều về điều này. Thêm "-c q" (w / o ngoặc kép) vào autoquito, điều này làm cho nó trở thành kẻ giết người quá trình lý tưởng.
Joanis

2
Khi Visual Studio và một ứng dụng được gỡ lỗi cả hai bị treo, hãy đính kèm và giết phiên bản cũ của VS. Kẻ giết người có thể là một ví dụ mới của VS, sau đó có thể mở dự án cũ và cho phép bạn tiếp tục làm việc.
Bruno Martinez

Tôi không thể tìm ra cách tải xuống bất cứ thứ gì từ liên kết đó ngoài winsdk_web.exe, không có gì.
endolith

Bây giờ bạn có thể lấy nó trong SDK Windows 10 bằng cách chạy trình cài đặt và sau đó bỏ chọn mọi thứ trừ "Công cụ gỡ lỗi cho Windows" ( docs.microsoft.com/en-us/windows-hardware/drivers/debugger/ tựa )
Coburn

6

thiết lập lệnh AT để chạy trình quản lý tác vụ hoặc xử lý trình thám hiểm dưới dạng HỆ THỐNG.

AT 12:34 /interactive "C:/procexp.exe"

Nếu process explorer nằm trong ổ C gốc của bạn thì điều này sẽ mở nó dưới dạng HỆ THỐNG và bạn có thể giết bất kỳ tiến trình nào mà không nhận được bất kỳ lỗi truy cập nào bị từ chối. Đặt cái này trong khoảng một phút trong tương lai, sau đó nó sẽ bật lên cho bạn.


4
Tôi nhận được cảnh báo sau khi thử điều này, vì vậy nó dường như không còn hoạt động: "Cảnh báo: Do ​​cải tiến bảo mật, tác vụ này sẽ chạy vào thời gian dự kiến ​​nhưng không tương tác. Sử dụng tiện ích scht task.exe nếu cần tác vụ tương tác ('scht task /? 'để biết chi tiết). "
WhiteKnight

0

Khi quyền truy cập ntsd bị từ chối, hãy thử:

ZeroWave được thiết kế để trở thành một công cụ đơn giản sẽ cung cấp một kết thúc đa cấp cho bất kỳ loại quy trình nào.

ZeroWave cũng là một chương trình dễ sử dụng do cài đặt đơn giản và giao diện đồ họa rất thân thiện.

ZeroWave có ba chế độ chấm dứt và với chế độ "INSane" có thể chấm dứt mọi loại quy trình có thể chạy trên Windows.

Có vẻ như ZeroWave không thể giết avp.exe


0

FYI đôi khi bạn có thể sử dụng HỆ THỐNG hoặc Trình cài đặt đáng tin cậy để hủy các tác vụ;)

google quickkill_3_0.bat

sc config TrustedInstaller binPath= "cmd /c TASKKILL /F  /IM notepad.exe
sc start "TrustedInstaller"
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.