javaserver64.exe是什么进程
发布网友
发布时间:2022-04-30 16:10
我来回答
共2个回答
热心网友
时间:2022-06-27 03:24
javaserver64.exe是java运行时的进程。因为本地安装的64位的jdk,所以进程中带有64。
Java 进程的建立方法:
在 JDK 中,与进程有直接关系的类为 Java.lang.Process,它是一个抽象类。在 JDK 中也提供了一个实现该抽象类的 ProcessImpl 类,如果用户创建了一个进程,那么肯定会伴随着一个新的 ProcessImpl 实例。同时和进程创建密切相关的还有 ProcessBuilder,它是在 JDK1.5 中才开始出现的,相对于 Process 类来说,提供了便捷的配置新建进程的环境,目录以及是否合并错误流和输出流的方式。
Java.lang.Runtime.exec 方法和 Java.lang.ProcessBuilder.start 方法都可以创建一个本地的进程,然后返回代表这个进程的 Java.lang.Process 引用。
Runtime.exec 方法建立一个本地进程
该方法在 JDK1.5 中,可以接受 6 种不同形式的参数传入。
Process exec(String command)
Process exec(String [] cmdarray)
Process exec(String [] cmdarrag, String [] envp)
Process exec(String [] cmdarrag, String [] envp, File dir)
Process exec(String cmd, String [] envp)
Process exec(String command, String [] envp, File dir)
他们主要的不同在于传入命令参数的形式,提供的环境变量以及定义执行目录。
ProcessBuilder.start 方法来建立一个本地的进程
如果希望在新创建的进程中使用当前的目录和环境变量,则不需要任何配置,直接将命令行和参数传入 ProcessBuilder 中,然后调用 start 方法,就可以获得进程的引用。
Process p = new ProcessBuilder("command", "param").start();
也可以先配置环境变量和工作目录,然后创建进程。
ProcessBuilder pb = new ProcessBuilder("command", "param1", "param2");
Map<String, String> env = pb.environment();
env.put("VAR", "Value");
pb.directory("Dir");
Process p = pb.start();
可以预先配置 ProcessBuilder 的属性是通过 ProcessBuilder 创建进程的最大优点。而且可以在后面的使用中随着需要去改变代码中 pb 变量的属性。如果后续代码修改了其属性,那么会影响到修改后用 start 方法创建的进程,对修改之前创建的进程实例没有影响。
JVM 对进程的实现
在 JDK 的代码中,只提供了 ProcessImpl 类来实现 Process 抽象类。其中引用了 native 的 create, close, waitfor, destory 和 exitValue 方法。在 Java 中,native 方法是依赖于操作系统平台的本地方法,它的实现是用 C/C++ 等类似的底层语言实现。我们可以在 JVM 的源代码中找到对应的本地方法,然后对其进行分析。JVM 对进程的实现相对比较简单,以 Windows 下的 JVM 为例。在 JVM 中,将 Java 中调用方法时的传入的参数传递给操作系统对应的方法来实现相应的功能。
热心网友
时间:2022-06-27 03:25
将java程序打包注册成windows系统服务的工具。
安装
将JavaService-2.0.10.zip解压缩到C:\JavaService目录下。(其实任意目录下都可以)
3 编写java类(测试用)
Java代码
import java.io.*;
import java.text.*;
import java.util.*;
public class Test
{
public static void main(String[] args) throws Exception
{
PrintWriter out=new PrintWriter(new FileWriter("d:\\javaTest\\test.log",true),true);
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
out.println("服务启动在:"+df.format(new Date()));
while(true)
{
out.println("现在时间是:"+df.format(new Date()));
Thread.sleep(1000*5);
}
}
}
保存为任意目录,如:"D:\JavaTest\Test.java",并编译为Test.class;
4 进入C:\JavaService目录,执行如下命令:
(1).针对单独的Test.class文件(该文件在D:\JavaTest下)
JavaService.exe -install MyService "%JAVA_HOME%\jre\bin\server\jvm.dll" -Djava.class.path="%JAVA_HOME%\lib\tools.jar;D:\JavaTest" -start Test
(2).将Test.class文件打成jar包放在-Djava.class.path后,其中-start Test中的Test是该.class文件在jar中的路经,如:com.cyber.service.Test,在src中的路经是:\com\cyber\service\Test.java。
JavaService.exe -install MyService "%JAVA_HOME%\jre\bin\server\jvm.dll" -Djava.class.path="%JAVA_HOME%\lib\tools.jar;C:\Tomcat 5.5\webapps\wpgl\WEB-INF\lib\驱动.jar;D:\JavaTest\Test.jar" -start Test
如果需要其他的外部jar包(数据库的驱动jar包等等),只要在-Djava.class.path 中添加即可,并以分号区分开.(也可以把其他的外部jar包,整合到Test.jar里去,只需要一个Test.jar包就可以了.但是需要第三方插件fatjar来完成外部jar包的整合)
(3).可以添加日志文件(也可以在Test文件中写好日志的路径及其文件名)
JavaService.exe -install MyService "%JAVA_HOME%\jre\bin\server\jvm.dll" -Djava.class.path="%JAVA_HOME%\lib\tools.jar;C:\Tomcat 5.5\webapps\wpgl\WEB-INF\lib\驱动.jar;D:\JavaTest\Test.jar" -start Test -out D:\JavaTest\log\stdout.log -err D:\JavaTest\log\stderr.log -current D:\JavaTest\log\ -description "测试"
其中-install 开关后面的参数是要添加的服务名;-start开关后面的参数是要启动的java类名;这里-Djava.class.path后面参数中的d:\javaTest是我的Test.class所在路径,实际应用中应该添加你的CLASSPATH。
运行后控制台显示“The MyService automatic service was successfully installed”表示安装成功。
需要注意的问题:
(1) %JAVA_HOME%为JDK目录,如果你没有设置,这里用jdk的绝对地址替代;
(2) -Djava.class.path是必须的,因为服务启动的时候无法访问系统的CLASSPATH变量,必须在这里显示指明;
(3) 服务添加成功以后,为自动启动类型,如需更改,需要自行在服务管理器(services.msc)中修改。
5 测试:
运行net start MyService启动服务;
检查d:\javaTest\test.log文件,数据一直在更新;
确认无误后,运行net stop MyService关闭服务;
Javaservice不支持C:\Program Files中间的空格,所以找不到JVM;使用%JAVA_HOME%时,又必须在其上加双引号才行,即:"%JAVA_HOME%" 。
删除服务:sc delete [service name]