2010-09-12 22 views
5

Tôi có một exe Windows bên ngoài thực sự là ứng dụng Java: Chạy .exe bắt đầu javaw.exe, để chạy ứng dụng Java đó.Làm thế nào để diệt Java Process trong Windows, KHÔNG giết javaw.exe?

Tôi không viết ứng dụng đó và không có quyền truy cập vào ứng dụng thông qua API. Tôi cần phải có thể giết nó, tuy nhiên. Vì vậy, ngay bây giờ tôi chỉ cần giết Windows javaw.exe quá trình, đó là tiền phạt cho một máy tính thử nghiệm chỉ chạy ứng dụng Java nhưng nếu tôi cần granularity tốt hơn, tôi không thể làm như vậy.

Tìm kiếm của tôi mang lại các đề xuất như Sysinternal's Process Explorer hoặc lệnh jps trong JDK, nhưng trong hệ thống đích mà tôi dự định cung cấp tập lệnh, cả JDK lẫn Process Explorer của Sysinternal đều không thể chạy được.

Có cách nào khác không yêu cầu công cụ bên ngoài không? Có javaw.exe có một chuyển đổi hoặc tùy chọn dòng lệnh liệt kê các quy trình Java? Có phiên bản JRE của jps không?

Cảm ơn.

Trả lời

3

Tôi vẫn đề nghị chỉ cần giết javaw.exe.

Tôi không thể nhìn thấy nhược điểm, vì đó là quá trình bạn muốn giết sau khi tất cả.

Hãy nhớ rằng nếu bạn chạy nhiều ứng dụng trên máy, thì mỗi ứng dụng phải có một cá thể JVM riêng biệt. Vì vậy, bạn vẫn có thể giết ứng dụng cụ thể nếu cần.

+0

Cảm ơn cả bạn, Jim và @mikera - +1 cho cả hai bạn vì đã giải thích vấn đề này cho tôi. Làm thế nào tôi biết * * javaw.exe để giết? –

+1

Bạn không thể tìm trong tab Ứng dụng của Trình quản lý tác vụ, sau đó nhấp chuột phải vào chương trình có liên quan và nhấn vào Quy trình đi tới. Điều đó sẽ cung cấp cho bạn javaw.exe đúng. –

+3

Những gì bạn cần là một công cụ như Sysinternals Process Explorer. Nó sẽ cho phép bạn xem các tiến trình cha và hiển thị cho bạn dòng lệnh đầy đủ được chuyển tới javaw.exe. –

2

Nếu bạn muốn tiêu diệt toàn bộ JVM, chỉ cần hủy quy trình javaw.exe. Trong một JVM, có thể có nhiều chủ đề Java nhưng không có cách nào để chọc vào JVM và chấm dứt chuỗi trừ khi nhà phát triển ứng dụng cung cấp phương thức để làm như vậy.

1

Dựa trên nhận xét của bạn, nhiều chương trình javaw.exe đang chạy và bạn cần phải biết nên xóa chương trình nào.

Bạn có thể muốn thử kết nối với từng quy trình với JConsole và kiểm tra JVM. Có thể có đủ manh mối để xác định cái nào cần giết. Một khi bạn đã xác định được hồ sơ của ứng dụng của bạn, bạn sẽ có thể kịch bản logic để làm cho nó dễ dàng hơn trong tương lai (sử dụng JMX để nhận được hầu hết các thông tin được cung cấp bởi JConsole).

3

Tàu JDK (và có thể là JRE) có tiện ích được gọi là jps có thể liệt kê tất cả các quy trình Java nhưng cũng cho bạn biết Main-Class hiện đang chạy trong JVM đó. Nếu JMX/JConsole không phải là một lựa chọn, chỉ cần phân tích cú pháp đầu ra của "jps -ml" và giết chết quá trình thích hợp có thể hoạt động.

0

Nếu tệp thực thi khởi chạy javaw rồi thoát mà không cung cấp thêm bất kỳ thông tin nào, có vẻ như bạn cần sử dụng ngôn ngữ kịch bản để chụp nhanh các quy trình đang chạy trên máy trước khi khởi chạy tệp thi hành và sau khi thực thi xong. Sau đó, bạn sẽ có thể suy ra đó là quá trình javaw mới. Bạn đang sử dụng ngôn ngữ kịch bản nào?

0

Chỉ cần một cách tiếp cận khác: nếu bạn có jdk, có một chương trình được gọi là jvisualVM trong thư mục bin. Nó có thông tin tốt đẹp về mỗi bối cảnh JVM đang chạy. Một trong những điều bạn có thể thấy là PID của VM, mà tôi sử dụng để giết quá trình trong Windows bằng cách sử dụng trình quản lý tác vụ (trên cửa sổ PID không được hiển thị theo mặc định, nhưng bạn có thể dễ dàng kích hoạt cột bằng cách vào xem -> hiển thị cột)

Các vấn đề liên quan