1、是程序本身出现bug,造成java程序崩溃,进程失效;
2、扰配是系统服务设置了自我监控的机制,java占用资源过多的话,关闭了java进程来释放占用的缓知指资源。
在Linux远程运行JAR包时,是不能关掉窗口程序的,否则程序也会终止。其中nohup表示后台运行,关闭窗口后也也继续执行,&意思是终哪春或端连接的时候后台运行,终端断了进程也会停。
具体解决方法是使用nohup命令,在窗口程序的前面加上nohup,程序的后面加上&,这样程序就会一直执行直到结束,而不会因为关闭窗口程序而停了。
例子,比如:nohupphpspider.php&回车,然后提示一堆东西,再次回李伍车,回到shell界面。这就可以了。
还有一个问题:程序在执行中会输出一些信息,如果后台执行的话,这些信息是不是没法看了?(比如:程序执行出错终端,想看看报错信息之类的)。使用了nohup命令后,会在当森坦前目录下生成一个nohup.out的日志文件,记录的就是命令的输出。
解决这个问题,要看这个进程是java程序自定义的进程,还是 *** 作系统的进程, *** 作系统的进程,又可以分为windows进程和Linux进程
一、针对 *** 作系统的进程:
1,首先java用户,要具有 *** 作进程的权限
2. 针对windows *** 作系统的进程,比如QQ进程:
String command = "taskkill /f /im QQ.exe"Runtime.getRuntime().exec(command)
其中:taskkill 是命令名称,/f /im 是参数,QQ.exe是进程的可执行文件迹祥哗。
3.针对Linux *** 作系统
String command = "kill /f /im QQ.exe"Runtime.getRuntime().exec(command)
二、在Java程序中自定义的进程
思路:在线程中设置一个标志变量,当这个变量的值在外界被改变的时候,有机会结束运行的线程
public class T {public static void main(String[] args) {
// 启动线程
MyThread thread = new MyThread()
new Thread(thread).start()
// 你的其它的工作,此时线程在运行中
姿行 // 你不想让线程干活了,停掉它
// 注意,这只是一宴圆个标志,具体线程何时停,并不能精确控制
thread.allDone = true
}
}
class MyThread implements Runnable {
boolean volatile allDone = false
public void run() {
// 每次循环都检测标志
// 如果设置停止标志时已经在循环里
// 则最长需要等待一个循环的时间才能终止
while (!allDone) {
// 循环里的工作
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)