Làm thế nào để ngăn chặn một quá trình dơi trên Windows?


11

Tôi có tệp BAT chạy trong nền trên Windows kéo dài khoảng mười phút. Bây giờ tôi muốn dừng nó trong khi nó đang chạy, nhưng tôi không thể tìm thấy tên của nó trong danh sách quy trình trong trình quản lý tác vụ. Vì vậy, làm thế nào tôi có thể tiếp cận điều này? Cảm ơn!

CẬP NHẬT1

Có vẻ khó ngăn chặn một quy trình BAT đang chạy trong backgroud. Và tôi quyết định cố gắng giết mọi quy trình liên quan đến tệp BAT theo tên, có thể bị quá mức. Tôi chấp nhận được vì hầu hết các quy trình trong tệp BAT của tôi không được sử dụng thường xuyên, chẳng hạn như ping, tracert, netstat, vv Nếu bạn có giải pháp nào tốt hơn xin vui lòng cho tôi biết. Xin cảm ơn.

CẬP NHẬT2

Cây quy trình BAT

văn bản thay thế


1
Làm thế nào bạn làm cho tập tin bat chạy trong nền? bạn nói bạn không thể làm ctrl-c. Tôi sẽ thử break = on nếu điều đó không hiệu quả, nhưng bạn nói rằng bạn không thể làm ctrl-c vì nó "ở chế độ nền". Có lẽ nó đã chạy và kết thúc, và bạn chỉ cần giết những gì nó sinh ra.
barlop

2
@ barlop, nó có thể được loại bỏ trong backgroud với ShellExecute(NULL,"open","some.bat",NULL,NULL,SW_HIDE);trong VC ++.
Sinh sản

Câu trả lời:


11

Các quy trình thường được khởi chạy trong một cây như thời trang, tôi khuyên bạn nên khởi chạy Microsoft / Sysiternals Process Explorer , Bắt đầu bằng cách nhấp vào Show Process Treetùy chọn (1), sau đó tìm quy trình của bạn và nhấp chuột phải và chọn Kill Process Tree(2) Điều này sẽ giết cả tệp gốc và tất cả mọi thứ mà nó đã đưa ra.

văn bản thay thế


Giết cây quy trình có vẻ hơi nặng tay. Nó có thể đủ để giết tiến trình cha (lệnh bat).
wag2639

1
@ wag2639, sau khi đọc câu hỏi, tôi nghĩ anh ấy muốn kết thúc BAT và sinh sản? Khi người ta nói rằng phải mất quá nhiều thời gian để xử lý, tôi hiểu rằng khi các quy trình được khởi chạy và sau đó không có gì xảy ra cho đến khi họ viết phản hồi ... Nếu cây không kết thúc, sẽ có một loạt các quy trình đang chạy Không làm gì cả.
William Hilsum

Tôi đã thử cách này và thêm hình ảnh vào câu trả lời của mình. Xin cảm ơn. Bây giờ tôi tìm thấy một lệnh có thể giết một quá trình bắt đầu bằng tệp BAT và các con của nó taskkill /F /T /IM cmd.exe. Vấn đề duy nhất là, mọi tệp BAT sẽ bắt đầu một cmd.exequy trình với PID khác nhau Tôi cần phải tìm ra cái nào là mục tiêu của tôi.
Sinh sản

@SpawnST, quá trình nào khởi chạy tệp BAT? Bạn cần phải giết mục đang khởi chạy nó sau đó nếu có nhiều bản sao.
William Hilsum

@ Wil, nó được bắt đầu bằng quy trình MFC / Hộp thoại. Hộp thoại chỉ chạy tệp BAT với vỏ cửa sổ khi được khởi tạo. Bây giờ tôi đang cố gắng đảm bảo rằng quy trình BAT được tạm thời hoàn toàn khi hộp thoại thoát.
Sinh sản

5

Bạn có thể sửa đổi tệp bó để nó sử dụng tệp khóa để tiếp tục hoạt động, bằng cách chèn kiểm tra giữa các lệnh cho sự tồn tại của tệp. Để ngăn chặn tập tin thực thi, chỉ cần xóa tập tin khóa.

Đây là một tập tin lô demo:

echo xx > "c:\temp\lockfile"
pause
if not exist "c:\temp\lockfile" goto  exit
pause
del "c:\temp\lockfile"
:exit

Để giết dữ dội các quá trình có thể được thực hiện vào lúc này, bạn có thể tạo một tập tin 'giết' hàng loạt sẽ chứa taskkill lệnh cho tất cả các nhiệm vụ có thể phóng từ các tập tin thực thi:

del "c:\temp\lockfile"
taskkill /im mytask1.exe
taskkill /im mytask2.exe

Đó là một ý tưởng tốt. Nhưng tôi nghĩ rằng nó có thể gây ra một số vấn đề cho ứng dụng của tôi khi một lệnh thực thi trong một thời gian dài, tracertví dụ.
Sinh sản

vâng, đó là những gì tôi đang làm bây giờ, thực sự rất bạo lực :-). Và có lẽ tập tin khóa là không cần thiết trong giải pháp này.
Sinh sản

Điều này là cần thiết để tệp bó không thực hiện tác vụ tiếp theo khi kết thúc hiện tại của nó. Điều khác có thể xảy ra là task1 bị chấm dứt và task2 được bắt đầu sau khi taskkill của nó đã được thực hiện, do đó, đợt kill sẽ đơn giản là bỏ lỡ task2.
harrymc

1

Một BAT thường chỉ khởi chạy một thể hiện của CMD.exe. Tùy thuộc vào những gì kịch bản của bạn làm, nó cũng sẽ bắt đầu các quá trình khác.


Vì vậy, có cách nào có thể ngăn chặn nó tiếp tục bắt đầu các quá trình khác?
Sinh sản vào

1
@SpawnST: Nếu cửa sổ CMD hiển thị, bạn không thể nhập CTRL + C?
paradroid

@ jason404, như tôi đã đề cập trong câu hỏi, nó đang chạy ở chế độ nền.
Sinh sản vào

1

Tôi đã viết một ứng dụng có thể giúp bạn, ít nhất là nếu BAT đang chạy trong cửa sổ CMD. Bạn có thể xem các cửa sổ ứng dụng đang chạy và nhận được PID của ứng dụng, sau đó bạn có thể giết nó bằng ứng dụng của tôi, bạn cũng có thể thấy tất cả các quy trình mà nó đã sinh ra và cũng giết chúng. Đây là một chương trình đơn giản thực sự, nhưng hiệu quả cho loại điều này. Bạn cũng có thể sử dụng nó để theo dõi chính xác nơi tệp HD BAT của bạn đang chạy từ đâu, trong trường hợp bạn chưa biết điều đó.


Tôi đang thực hiện công việc này với VC ++ / MFC và tôi nghĩ rằng tôi cần một số lệnh windows để hoàn thành công việc. Cảm ơn đã phản hồi.
SpawnST

1

Làm thế nào là tập tin lô được gọi?
Nếu nó là từ Trình lập lịch tác vụ, thì bạn cũng có thể dừng nó từ đó. Nếu đó là từ một dịch vụ, thì bạn có thể dừng dịch vụ.



0

Nếu bạn mở nó trong dấu nhắc lệnh, bạn có thể nhấn Ctrl+ C. Đợi vài giây và nó sẽ bị chấm dứt.

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.