2011-10-14 20 views

Trả lời

6

Bạn có thể thử ps -aux | grep foobar để nhận được pid, sau đó ban hành lệnh kill chống lại nó, cách khác bạn có thể muốn sử dụng pkillfoobar, trong cả hai trường hợp foobar là tên của ứng dụng bạn muốn chấm dứt.

0

Có thể bạn sẽ phải gọi pskill Unix lệnh sử dụng Runtime.exec và cạo đầu ra của họ. Tôi không nghĩ rằng một chương trình Java có thể dễ dàng kiểm tra/truy cập các quá trình mà nó không tạo ra.

1

Nếu bạn đang khởi động ứng dụng này từ tập lệnh, bạn có thể lấy pid của quá trình cuối cùng được tạo trong nền bằng cách sử dụng biến đặc biệt $!, giá trị này bạn có thể lưu trên một tệp để sử dụng sau này trên chức năng tắt máy của bạn.

Dưới đây là một ví dụ:

nohup java -jar example.jar & 
echo $! > application.pid 
5

của pid cho quá trình java -e.g ps -aux | grep java | awk '{print $2}'.

Bạn cũng có thể gọi jps sẽ cung cấp cho bạn danh sách quy trình. Một nhược điểm của việc này là nó sẽ chỉ hiển thị cho bạn các quá trình cho người dùng ban hành lệnh jps.

3

bạn có thể sử dụng pidof để có được pid của ứng dụng của bạn

pidof <application name>

1

ps aux | awk '/java/ {print "sleep 10; kill "$2}' | bash

trong Ubuntu, ps -aux ném một lỗi cú pháp, nơi ps aux công trình.

đầu ra được chuyển đến awk khớp với các dòng bằng java và ngủ trong 10 giây và sau đó giết chương trình bằng pId. chú ý đường ống để bash. Vui lòng chỉ định tuy nhiên bạn muốn bao lâu hoặc gọi những cuộc gọi khác mà bạn cảm thấy thích hợp. Tôi nhận thấy hầu hết các câu trả lời khác bị bỏ quên để nắm bắt phần 'sau một khoảng thời gian nhất định' của quesiton.

bạn cũng có thể thực hiện việc này bằng cách gọi pidof java | awk '{print "sleep 10; kill "$1}' | bash nhưng lựa chọn là của bạn. Tôi thường sử dụng ps aux.

3

Làm thế nào về vấn đề này sau đó?

public static void killAll(String process) { 
    try { 
     Vector<String> commands = new Vector<String>(); 
     commands.add("pidof"); 
     commands.add(process); 
     ProcessBuilder pb = new ProcessBuilder(commands); 
     Process pr = pb.start(); 
     pr.waitFor(); 
     if (pr.exitValue() != 0) return; 
     BufferedReader outReader = new BufferedReader(new InputStreamReader(pr.getInputStream())); 
     for (String pid : outReader.readLine().trim().split(" ")) { 
      log.info("Killing pid: "+pid); 
      Runtime.getRuntime().exec("kill " + pid).waitFor(); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
}