189 8069 5689

进程管理java代码 进程javaexe

java代码——返回当前计算机所有进程ID怎么做?

获取JAVA进程:

创新互联建站成立于2013年,先为巴中等服务建站,巴中等地企业,进行企业商务咨询服务。为巴中企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

package com.test;

import java.lang.management.ManagementFactory;

import java.lang.management.RuntimeMXBean;

public class Target {

public static void main(String[] args) throws InterruptedException {

System.out.println(getProcessID());

while(true) {

Thread.sleep(10000);

}

}

public static final int getProcessID() {  

RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();

System.out.println(runtimeMXBean.getName());

return Integer.valueOf(runtimeMXBean.getName().split("@")[0])  

.intValue();  

}

获取所有正在运行着的Java进程

package com.test;

import java.util.HashSet;

import java.util.Set;

import sun.jvmstat.monitor.MonitoredHost;

import sun.jvmstat.monitor.MonitoredVm;

import sun.jvmstat.monitor.MonitoredVmUtil;

import sun.jvmstat.monitor.VmIdentifier;

public class ProcessID {

public static void main(String[] args) throws Exception {

// 获取监控主机

MonitoredHost local = MonitoredHost.getMonitoredHost("localhost");

// 取得所有在活动的虚拟机集合

Set? vmlist = new HashSetObject(local.activeVms());

// 遍历集合,输出PID和进程名

for(Object process : vmlist) {

MonitoredVm vm = local.getMonitoredVm(new VmIdentifier("//" + process));

// 获取类名

String processname = MonitoredVmUtil.mainClass(vm, true);

System.out.println(process + " ------ " + processname);

}

}

}

可以直接根据类找到对应Java进程ID的方法

package com.test;

import java.net.URISyntaxException;

import java.util.HashSet;

import java.util.Set;

import sun.jvmstat.monitor.MonitorException;

import sun.jvmstat.monitor.MonitoredHost;

import sun.jvmstat.monitor.MonitoredVm;

import sun.jvmstat.monitor.MonitoredVmUtil;

import sun.jvmstat.monitor.VmIdentifier;

public class ProcessID {

public static void main(String[] args) throws Exception {

int pid = getProcess(Target.class);

System.out.println("PID: "+pid);

}

public static int getProcess(Class? cls) throws MonitorException, URISyntaxException {

if(cls == null) {

return -1;

}

// 获取监控主机

MonitoredHost local = MonitoredHost.getMonitoredHost("localhost");

// 取得所有在活动的虚拟机集合

Set? vmlist = new HashSetObject(local.activeVms());

// 遍历集合,输出PID和进程名

for(Object process : vmlist) {

MonitoredVm vm = local.getMonitoredVm(new VmIdentifier("//" + process));

// 获取类名

String processname = MonitoredVmUtil.mainClass(vm, true);

if(cls.getName().equals(processname)) {

return ((Integer)process).intValue();

}

}

return -1;

}

}

如何在Linux下管理Java进程

首先,这段shell应该有start和stop的功能。如何stop当前我想停止的进程在Linux下有很多方法,我用的方法是,启动时将进程对应的process id记录到一个文件中,在停止这个进程时,从文件中读取process id进行kill。同时,做一个crontab,不停在系统中查找文件中的process id对应的进程是否存在,如果不存在,重新启动该进程。

启动和停止脚本:ctrl.sh

Shell代码

#!/bin/sh

#

# start/stop the Service

#

# do some init here

#

case "$1" in

'restart')

# first Stopping the Service

PID=`sed -n 1p pidfile` #get pid from file

if [ ! -z "$PID" ] ; then

echo "Stopping the Service, begin killing ${PID}"

kill ${PID} /dev/null 21

sleep 2

fi

# second Starting the Service

if [ some condition here ]; then

echo "Starting the Service"

java -classpath some_class_path_here -jar helloworld.jar

echo $! pidfile #record process id to file

fi

;;

'stop')

# Stopping the Service

PID=`sed -n 1p pidfile` #get pid from pidfile

if [ ! -z "$PID" ] ; then

echo "Stopping the Service, begin killing ${PID}"

kill ${PID} /dev/null 21

fi

;;

*)

echo "Unmarkable usage: $0 {restart|stop}"

;;

esac

然后再做一个crontab需要执行的脚本:crntb.sh

Shell代码

#!/bin/sh

PID=`sed -n 1p pidfile`

cmd=`ps -e|grep $PID` #get process with the given pid

indx=`expr index "$cmd" "java"` #whether the string 'cmd' contains 'java'

if [ "$indx" = "0" ]; then

/...path of ctrl.sh.../ctrl.sh restart

fi

最后在crontab中每分钟执行上面的crntb.sh

Shell代码

crontab -e

Shell代码

0-59 * * * * * /....path of crntb.sh.../crntb.sh

这样就可以每分钟查看当前pid对应的进程是不是还在,如果不在了,就重新启动。

当然,光用这几小段代码是不足以维护一个完整的商用程序的。但是,做到了这点,最起码万里长征的第一步已经迈出去了。

Java进程怎么实现?

Java中多进程编程的实现,和多线程一样,多进程同样是实现并发的一种方式,需要的朋友可以参考下

1.Java进程的创建

Java提供了两种方法用来启动进程或其它程序:

(1)使用Runtime的exec()方法

(2)使用ProcessBuilder的start()方法

1.1 ProcessBuilder

ProcessBuilder类是J2SE 1.5在java.lang中新添加的一个新类,此类用于创建操作系统进程,它提供一种启动和管理进程(也就是应用程序)的方法。在J2SE 1.5之前,都是由Process类处来实现进程的控制管理。

每个 ProcessBuilder 实例管理一个进程属性集。start() 方法利用这些属性创建一个新的 Process 实例。start() 方法可以从同一实例重复调用,以利用相同的或相关的属性创建新的子进程。

每个进程生成器管理这些进程属性:

命令 是一个字符串列表,它表示要调用的外部程序文件及其参数(如果有)。在此,表示有效的操作系统命令的字符串列表是依赖于系统的。例如,每一个总体变量,通常都要成为此列表中的元素,但有一些操作系统,希望程序能自己标记命令行字符串——在这种系统中,Java 实现可能需要命令确切地包含这两个元素。

环境 是从变量 到值 的依赖于系统的映射。初始值是当前进程环境的一个副本(请参阅 System.getenv())。

工作目录。默认值是当前进程的当前工作目录,通常根据系统属性 user.dir 来命名。

redirectErrorStream 属性。最初,此属性为 false,意思是子进程的标准输出和错误输出被发送给两个独立的流,这些流可以通过 Process.getInputStream() 和 Process.getErrorStream() 方法来访问。如果将值设置为 true,标准错误将与标准输出合并。这使得关联错误消息和相应的输出变得更容易。在此情况下,合并的数据可从 Process.getInputStream() 返回的流读取,而从 Process.getErrorStream() 返回的流读取将直接到达文件尾。

如何在windows下管理不同的java进程

在windows下运行java程序的启动脚本:

java -classpath 需要加入classpath的内容列表,以分号分割 需要执行的程序.jar

如:

java -classpath hello.properties hello.jar

将其保存为startup.bat。

启动后,发现黑色的cmd框框一直讨厌的呆在那里,并且在进程管理器中查看该进程为java.exe。如果一台服务器上跑了很多个这样的进程后你就会发现,不小心关闭这些cmd框框带来的后果是致命的,轻则服务中断,重则工资被扣。怎么去掉那个讨厌的cmd框框呢?也许用javaw可以解决问题。

javaw -classpath hello.properties hello.jar

框框还在那里,但是关闭一下试试,嘿嘿,javaw.exe这个进程还在,看来是比刚才进步了哦。

那么如何自动关闭这个cmd框框呢?

start javaw -classpath hello.properties hello.jar

在运行一次试试,HOHO,我们的目的打到了,启动后,cmd框框自动关闭了。

这个貌似是没有问题的,但是当你需要运行几个甚至十几个jar程序后,你会在进程管理器中发现长长的一排javaw.exe,根本无法监测某个进程消耗的资源,怎么来区别每一个javaw到底运行的是什么程序呢?

由于这些javaw都指向了%JAVA_HOME%/bin/javaw.exe,我们可以在javaw.exe上面动动脑筋。我们复制几个javaw.exe文件在bin目录,将其中的一些改名为hello.exe,world.exe等等你需要显示在进程管理器中的名字,然后将启动脚本修改为这样:

start C:/Progra~1/Java/jdk1.x.x_xx/bin/hello -classpath hello.properties hello.jar

注意,Progra~1是替代Program Files的有效写法,表示Progra开头的第一个文件夹。如果你的JDK路径没有空格,也可以使用全路径代替。

这样改过之后,在进程管理器中会发现每个不同的java进程变成了hello.exe,world.exe了,这样可以方便的查看每个进程的资源占用情况,甚至是强行关闭这个进程了。

在Linux下,这个过程及其简单:

ps -fe|grep hello

就看到了hello.jar这个进程了。


网页名称:进程管理java代码 进程javaexe
当前URL:http://jkwzsj.com/article/doiedes.html

其他资讯