2010-04-15 25 views
18

Tôi là một newbie trong cmd, vì vậy xin vui lòng cho phép tôi hỏi một câu hỏi ngu ngốc: Làm thế nào chúng ta có thể ngăn chặn một quá trình chạy Java thông qua Windows cmd?Làm thế nào chúng ta có thể ngăn chặn một quá trình chạy java thông qua Windows cmd?

Ví dụ, nếu chúng ta bắt đầu Jetty (một máy chủ web mini) với lệnh sau đây:

start javaw -jar start.jar 

Làm thế nào để chúng ta thấy quá trình này và ngăn chặn nó sau này?

Rõ ràng lệnh sau đây không làm việc:

stop javaw -jar start.jar 
+4

Bạn hãy thử 'Ctrl + C' hoặc ' Ctrl + Break'? –

+0

có, nhưng tôi có thể xây dựng một tệp .bat để dừng nó bằng Ctrl + C hoặc Ctrl + Break không? –

+2

Có thể kiểm tra lệnh taskkill. Nó có nhiều tùy chọn để chọn quá trình giết: bằng id tiến trình, theo mẫu tên, bằng cách sở hữu người dùng, v.v. Nhưng tôi khuyên bạn nên tìm cách tiêu chuẩn ít bạo lực hơn để đóng ứng dụng cụ thể (máy chủ thường có một số loại của lệnh "stop") –

Trả lời

9

Nó là khá lộn xộn nhưng bạn cần phải làm điều gì đó như sau:

START "do something window" dir 
FOR /F "tokens=2" %I in ('TASKLIST /NH /FI "WINDOWTITLE eq do something window"') DO SET PID=%I 
ECHO %PID% 
TASKKILL /PID %PID% 

Các mặt hàng này trên this page.

(Kiểu này mà là dễ dàng hơn nhiều nếu bạn có một hệ thống UNIX/LINUX ... hoặc nếu bạn chạy Cygwin hoặc tương tự trên Windows.)

+0

PowerShell cũng làm cho điều này tầm thường. – Joey

+1

Nếu bạn muốn giết tất cả các tiến trình java.exe: 'taskkill/F/IM java.exe/T'. Do đó, cảm ơn vì vòng lặp 'FOR' tôi đã sử dụng lại ở nơi khác :) – Benj

8

Thông thường tôi không có nhiều Java xử lý mở để

taskkill /im javaw.exe 

hoặc

taskkill /im java.exe 

nên đủ. Điều này sẽ giết chết tất cả trường hợp của Java, mặc dù.

+2

' taskkill/f/im java.exe' trong trường hợp của tôi. Cảm ơn câu trả lời của bạn! – lordmegamax

2
FOR /F "tokens=1,2 delims= " %%G IN ('jps -l') DO IF %%H==name.for.the.application.main.Class taskkill /F /PID %%G 

name.for.the.application.main.Class - thay thế này đến lớp chính của ứng dụng của bạn (bạn có thể tìm thấy nó trong cột thứ hai của jps -l đầu ra)

28

Khi tôi chạy taskkill để ngăn chặn quá trình javaw.exe nó sẽ nói nó đã chấm dứt nhưng vẫn chạy. Quá trình jqs (java qucikstart) cũng cần được dừng lại. Chạy tập tin batch này đã giải quyết vấn đề.

taskkill /f /im jqs.exe 
taskkill /f /im javaw.exe 
taskkill /f /im java.exe 
20

Tôi thích trang này.

wmic process where "name like '%java%'" delete 

Bạn thực sự có thể giết quá trình trên máy từ xa theo cách tương tự.

wmic /node:computername /user:adminuser /password:password process where "name like '%java%'" delete 

wmic thật tuyệt vời!

+0

hoạt động độc đáo, nhưng làm thế nào để làm cho nó hoạt động trong một tập tin thực thi? – Xerus

+0

@Xerus Cú pháp phải giống nhau. Sự khác biệt duy nhất tôi có thể nghĩ đến là, bạn có thể cần phải tăng gấp đôi dấu hiệu phần trăm trong mệnh đề 'where': 'where' như '%% java %%'" 'để chỉ định các dấu hiệu phần trăm chữ như các ký tự đại diện WQL, do đó, lô của bạn tập lệnh sẽ không cố gắng mở rộng '% java%' làm biến hàng loạt. – rojo

+0

@Xerus Có lẽ bạn nên đăng câu hỏi mới và hiển thị những gì đang xảy ra trong ngữ cảnh. – rojo

1

bắt đầu javaw -DSTOP.PORT = 8079 -DSTOP.KEY = bí mật -jar start.jar

bắt đầu javaw -DSTOP.PORT = 8079 -DSTOP.KEY = bí mật start.jar -jar --stop

0

Bạn có thể làm điều này với PowerShell:

$process = Start-Process "javaw" "-jar start.jar" -PassThru 
taskkill /pid $process.Id 

lệnh taskkill sẽ duyên dáng đóng ứng dụng.

0

Trong trường hợp bạn muốn giết không phải tất cả các quy trình java nhưng các lọ cụ thể chạy. Nó sẽ làm việc cho nhiều lọ là tốt.

wmic Path win32_process Where "CommandLine Like '%YourJarName.jar%'" Call Terminate 

khác taskkill /im java.exe sẽ làm việc để giết tất cả java xử lý

0

(trên hệ điều hành Windows không có Service) Mùa xuân Boot khởi động/dừng mẫu.

run.bat

@ECHO OFF 
IF "%1"=="start" (
    ECHO start your app name 
    start "yourappname" java -jar -Dspring.profiles.active=prod yourappname-0.0.1.jar 
) ELSE IF "%1"=="stop" (
    ECHO stop your app name 
    TASKKILL /FI "WINDOWTITLE eq yourappname" 
) ELSE (
    ECHO please, use "run.bat start" or "run.bat stop" 
) 
pause 

start.bat

@ECHO OFF 
call run.bat start 

stop.bat:

@ECHO OFF 
call run.bat stop 
Các vấn đề liên quan