2010-01-25 42 views
11

Có cách nào để ngăn chặn một chương trình java chạy bằng một kịch bản shell bằng cách biết alone.I tên đang sử dụng ksh vỏShell script để ngăn chặn một chương trình java

+1

Biết tên gì? Nếu bạn biết tên của tệp thực thi (thường là 'java'),' killall' là bạn của bạn. – sfussenegger

+0

@sfussenegger: Có lẽ anh ta không muốn giết tất cả các quy trình java, nhưng chỉ có một quy trình cụ thể. – Mnementh

+0

@Mnementh đó là những gì tôi mong đợi quá, nhưng từ các thông tin nhất định đây là điều tốt nhất tôi có thể khuyên bạn nên. – sfussenegger

Trả lời

6

Thêm thuộc tính duy nhất vào JVM để xác định dễ dàng, ví dụ: cho test.class

java -Duniquename=1 test 

Để giết nó:

ps ax | grep uniquename | grep -v grep | awk '{print $1}' | xargs kill 
+0

Lỗi ném của nó.I đang sử dụng vỏ ksh – Harish

+0

bạn đang gặp phải lỗi gì? –

+0

Nó hoạt động tốt dưới KSH. Có thể bạn đã thực hiện lỗi khi sao chép lệnh. – diciu

1

Bạn có thể sử dụng pkill:

pkill your_java_program_name 

Thao tác này sẽ hoạt động nếu bạn chỉ chạy một phiên bản chương trình đang chạy.

3

Bạn có thể sử dụng jps xác định id tiến trình được liên kết với tên của chương trình java bắt đầu (jps là trình quản lý quy trình cho các chương trình java). Với id này, bạn có thể giết quá trình bình thường.

+0

giả sử tên tệp java của tôi là test.java và đang chạy như thế nào để tìm nó? – Harish

+0

+1 để giới thiệu tôi với jps :) – sfussenegger

+0

@Harish: Sau khi biên dịch và thực thi nó sẽ được hiển thị dưới dạng 'kiểm tra'. Nếu bạn gói nó trong một jar thực thi (test.jar) và thực thi thông qua 'java -jar test.jar' jps hiển thị 'test.jar'. – Mnementh

20

theo dõi trên Mnementh' suggestion:

này nên thực hiện công việc

jps -l | grep org.example.MyMain | cut -d ' ' -f 1 | xargs -rn1 kill 
  • jps -l: danh sách java chuyên nghiệp cess với "tên gói đầy đủ cho lớp chính của ứng dụng hoặc tên đường dẫn đầy đủ đến tệp JAR của ứng dụng."

  • grep: chọn quá trình bạn thích

  • cut -d -' ' -f 1: chia nhỏ các đầu ra trong các cột sử dụng dấu phân cách '' và chỉ in một đầu tiên (pid)

  • xargs -rn1 kill: thực hiện kill cho mỗi PID (nếu có)

lưu ý rằng bạn phải chạy jps và xarg với cùng một người dùng (hoặc gốc) khi bạn đang chạy quá trình

+1

+1 cho mỗi' wow 'tôi đã nói trên mỗi dòng.:) – Nishant

+1

Thao tác này cũng sẽ hoạt động đối với các máy windows, nhưng bạn sẽ cần phải thực hiện một số phát hiện môi trường để tìm ra 'kill' nào để sử dụng. –

+0

@Odelya Tôi vừa thêm '-r' (' --no-run-if-empty') vào 'xargs' để tránh lỗi này. – sfussenegger

1

bạn có thể sử dụng tùy chọn -o ps để định dạng đầu ra của bạn,

ps -eo cmd,pid | awk '!/awk/&&/mycommand/{cmd="kill -9 "$2;system(cmd)}' 
Các vấn đề liên quan