Runtime 与操作系统交互

java.lang.Runtime
每一个java程序都有一个Runtime类的单一实例,可以通过getRuntime静态方法获得。程序通过它与程序的运行环境(也就是操作系统)相交互。

1.内存查看

int java.lang.Runtime.availableProcessors()
jvm的可用处理器数量。

long java.lang.Runtime.totalMemory()
初始的总内存,单位为byte。
long java.lang.Runtime.maxMemory()

最大可用内存。

long java.lang.Runtime.freeMemory()

当前可用内存。

2.运行其他程序

Process java.lang.Runtime.exec(String command) throws IOException
在一个隔离的进程中执行command命令。

java.lang.Process
可通过ProcessBuilder.start()与Runtime.exec()方法得到Process实例。此类提供了很多方法,可从process中得到输入,也可以向process中输出;还可以等待进程结束并检查退出码;可以摧毁process。

InputStream java.lang.Process.getInputStream()
从Process的标准输出得到InputStream。函数内部通过管道实现。

int java.lang.Process.waitFor() throws InterruptedException
等待Process执行完毕,达到同步的效果。返回值为process的返回值。默认地,0表示正常退出。

public class SudoJava {
	public static void main(String[] args) throws IOException, InterruptedException {
		StringBuilder sb = new StringBuilder("sudo ");
		for (String str : args)
			sb.append(str).append(" ");
		//待执行的命令在子进程中执行。若没有执行完毕父进程结束,则子进程也要被销毁。
		//若想保证进程执行完全,需要process.waitFor();
		Process process=Runtime.getRuntime().exec(sb.toString());
		process.waitFor();
	}
}

3.定时任务例子

4. 添加退出钩子

void java.lang.Runtime.addShutdownHook(Thread hook)

程序在退出时(正常退出、System.exit()、与 被操作系统强行终止等),hookThread得到触发。可以添加多个hookThread。

时间: 2024-08-28 23:49:00

Runtime 与操作系统交互的相关文章

按钮-有什么软件可以监测应用程序和操作系统交互的信息

问题描述 有什么软件可以监测应用程序和操作系统交互的信息 有什么软件可以监测应用程序和操作系统交互的信息 比如我操作了一下应用程序上的某一个按钮就发出一个消息给操作系统 解决方案 要监控Windows消息的话,可以使用Spy++ 要监控HTTP的话,可以使用Fidler 要监控socket的话,可以使用WPE 解决方案二: 使用 API HOOK 与系统交互,你只能 API 的接口,HOOK 住所有 API 就可以达到监控的目的 解决方案三: windows窗口都有消息,可以捕获消息钩子,还有鼠

Golang runtime 浅析

从Goroot的代码出发,里面有很多代码非常复杂,一点点看吧.最重要的概念就是runtime,golang的程序都是在runtime的基础上运行的(除了与底层直接交互的syscall). Runtime 在$goroot/pkg/runtime/中有三个文件非常重要: proc.c stack.h runtime.h   在runtime.h中你能看到许多的数据结构和接口 这里的数据结构就是go中的各种特定的结构对应的底层实现,比如slice: 1 2 3 4 5 6 7 struct  Sli

Objective-C Runtime

原文地址: http://www.cocoachina.com/ios/20141107/10162.html 本文详细整理了 Cocoa 的 Runtime 系统的知识,它使得 Objective-C 如虎添翼,具备了灵活的动态特性,使这门古老的语言焕发生机.主要内容如下: 引言 简介 与Runtime交互 Runtime术语 消息 动态方法解析 消息转发 健壮的实例变量(Non Fragile ivars) Objective-C Associated Objects 总结 引言 曾经觉得O

Node.js 探秘(一)- 初识单线程的 Node.js

前言 从Node.js进入人们的视野时,我们所知道的它就由这些关键字组成 事件驱动.非阻塞I/O.高效.轻量,它在官网中也是这么描述自己的. Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js uses an event-driven,non-blocking I/O model that makes it lightweight and efficient. 于是,会有下面的场景出现:

Java中JDK,JRE和JVM之间的关系

初学JAVA很容易被其中的很多概念弄的傻傻分不清楚,首先从概念上理解一下吧,JDK(Java Development Kit)简单理解就是Java开发工具包,JRE(Java Runtime Enviroment)是Java的运行环境,JVM( java virtual machine)也就是常常听到Java虚拟机.JDK是面向开发者的,JRE是面向使用JAVA程序的用户,上面只是简单的区别,一般网上好多都讲概念,我就不讲了,直接截图应该会更清晰一点,我安装的JDK1.8,效果如图: JDK和J

[sikuli]-怎样在Eclipse与NetBean中使用sikuli

在这篇文章里,我建议如果你想使用python或者java来进行sikuli的编程,请你深入的读一下我的文章,例如如何在java项目中使用sikuli. 你还需要知道一些用IDE开发的前置条件,例如如何在IDE里使用Jython 下面的方法只适用在windows 7 32位操作系统,以及Mac os X10.6,linux的使用者可以参考这些配置自己设置他们. 这可能是你选择使用IDE进行sikuli编程的一些理由: 你想开发sikuli插件 你需要debugger你的代码 你需要一个很好的交互

Riddler助力Docker容器为runC运行环境做准备

本文讲的是Riddler助力Docker容器为runC运行环境做准备[编者的话]本文主要是介绍Riddler工具,讲解Riddler为开发者带来的便利,并对基本使用进行了介绍和解释. 这是一个关于标准化带来的优势的故事,同时介绍如何利用Riddler转换一个Docker容器为runC镜像.Riddler由容器开发者Jess Frazelle研发. Phil Estes 是IBM开放云技术的高级技术经理,他将在本周多伦多的LinuxCon会议上介绍Riddler的性能. 运行,运行,运行! 回顾开

Java千百问_01基本概念(001)_什么是Java

什么是Java Java是一种开发语言(核心特点:跨平台,面向对象,名称由来看这里:J2EE里面的2是什么意思),对于开发者来讲,Java基本等于Jdk. Jdk的版本介绍看这里:Java都有那些版本 开发人员一般通过IDE(Eclipse.NetBeans.JBuilder等)编写.编译Java代码(在远古没有IDE的时代,都是用文本编辑器编写,使用javac编译),在这个过程中,会使用到Jdk与第三方Jar包(Jar包即一组编译后的类打成的压缩包,可以使用解压工具解压成文件结构). 想知道J

即将改变软件开发的5个Java9新特性

预计发布的Java 9中,最令人兴奋的特性是什么? 有关Java9的消息最近显得有些沉寂,不要被它迷惑了.JDK开发者正在努力朝着下一个版本迈进,计划2015年12月前完成所有功能开发.之后,它会经历严格测试和bug修复以准备它的全面上市,按计划会在2016年9月发布. 今天我们已经对Java 9中所期待的特性有了一个很清晰的图景.如果Java 8可以被描述为主要是lambdas表达式.streams和API变化的话,那么Java 9就是关于Jigsaw.额外的实用工具和内部的变化.在这篇文章中