2011-11-21 39 views
7

Cách tốt nhất để có được thời gian hoạt động UNIX trong Java là gì? Có một thư viện/hàm Java chuẩn nào mà tôi có thể sử dụng hay nên sử dụng exec của Runtime hay ProcessBuilder để thực thi 'uptime'? Cảm ơnLàm thế nào để có được thời gian hoạt động UNIX trong Java?

+2

bản sao có thể có của [Thời gian hoạt động của hệ thống truy vấn (không phải JVM) trong Java] (http://stackoverflow.com/questions/674106/query-for-system-not-jvm-uptime-in-java) –

+1

@TomaszNurkiewicz Tôi đã nhìn thấy câu hỏi đó sớm hơn nhưng có vẻ như nó yêu cầu một giải pháp bất khả tri nền tảng. Tôi đang tìm một cái gì đó mà có thể làm việc cụ thể trên máy Nix – Sam

+0

Xin lỗi, và tôi thực sự tìm thấy một giải pháp * NIX, xem câu trả lời của tôi. –

Trả lời

7

Bạn có thể đọc /proc/uptime:

new Scanner(new FileInputStream("/proc/uptime")).next(); 
//"1128046.07" on my machine and still counting 

Từ Wikipedia:

Hiển thị bao lâu hệ thống đã có mặt trên vì nó đã được khởi động lại lần cuối:

$ cat /proc/uptime 
    350735.47 234388.90 

Số đầu tiên là tổng số giây hệ thống đã tăng. Số thứ hai là bao nhiêu thời gian mà máy đã bỏ không hoạt động, tính bằng giây.

+0

hoàn hảo! cảm ơn bạn tôi sẽ chấp nhận một khi bộ đếm thời gian cho tôi – Sam

+2

Điều đó tốt cho Linux, nhưng không phải tất cả các hệ thống UNIX. Bạn có thể thấy từ liên kết Wikipedia của bạn rằng nó sẽ không hoạt động trên BSD, ví dụ. – vipw

+1

theo thử nghiệm của tôi về số thứ hai RHEL là thời gian không hoạt động của tất cả các bộ vi xử lý, vì vậy nó có thể lớn hơn một lần đầu tiên '$ cat/proc/uptime 2418163.50 4809606.42' – Betlista

3
Runtime.getRuntime().exec('uptime'); 

Bạn đã thử cái này chưa? Lệnh duy nhất thực hiện điều gì đó tương đương với system('uptime'); trong java là runTime.exec(). Thats tất cả tôi có thể nghĩ ra ..

3

này có khả năng là hoàn toàn hệ thống phụ thuộc nhưng bạn có thể sử dụng System.nanotime();

System.out.println("/proc/uptime " + new Scanner(new FileInputStream("/proc/uptime")).next()); 
System.out.println("System.nanoTime " + System.nanoTime()/1e9); 

in

/proc/uptime 265671.85 
System.nanoTime 265671.854834206 

Cảnh báo: Đây là khó có khả năng làm việc trên tất cả các nền tảng.

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