『壹』 如何關閉java程序
我詳細說一下吧
java程序啟動之後,JVM(java虛擬機)會實例化一個Runtime類,這是一個運行時類實例,包含這個java程序運行的所有信息,一個程序會實例化一個Runtime類且只能實例化一個Runtime類。我們可以通過這個Runtime類實例操作程序的運行。它的exit(int status)方法會終止程序的運行。例:
Runtime.getRuntime().exit(0);
其中參數status表示狀態,0表示正常退出,非0表示異常退出。非0參數有什麼用呢?
addShutdownHook(Thread hook)方法可以將一個Thread可程序的關閉hook(掛/聯系)起來,程序退出前,會執行這個方法,這樣我們可以根據退出狀態作相應的善後操作。
另外,System.exit(int status)也是調用這個Runtime類實例的退出方法來間接實現程序的退出的。
再加一點,Runtime類可以創建子進程,如下:
Process p=Runtime.getRuntime().exec("notepad");
這個語句將會創建一個記事本程序(它是Runtime類創建的子進程)
p.destroy();
這個語句終止剛才創建的子進程。
『貳』 怎麼強制停止java程序
Ctrl+Shift+Esc打開任務管理器,選擇進程,找到java進程,關掉它
『叄』 eclipse中怎樣停止正在運行的java多線程,用什麼快捷鍵,謝謝
我想這個是沒有快捷鍵的,你可以在控制台裡面使用terminate終止程序,或者在任務管理器裡面終止java應用程序的運行
『肆』 java中終止程序的執行
想直接整個程序的結束用System.exit(0);
如果是在for循環,while或if中嘗試用return ,break等
『伍』 如何用Java關閉一個進程
解決這個問題,要看這個進程是java程序自定義的進程,還是操作系統的進程,操作系統的進程,又可以分為windows進程和linux進程
一、針對操作系統的進程:
1,首先java用戶,要具有操作進程的許可權
2. 針對windows操作系統的進程,比如QQ進程:
Stringcommand="taskkill/f/imQQ.exe";
Runtime.getRuntime().exec(command);
其中:taskkill 是命令名稱,/f /im 是參數,QQ.exe是進程的可執行文件。
3.針對Linux操作系統
Stringcommand="kill/f/imQQ.exe";
Runtime.getRuntime().exec(command);
二、在Java程序中自定義的進程
思路:在線程中設置一個標志變數,當這個變數的值在外界被改變的時候,有機會結束運行的線程
publicclassT{
publicstaticvoidmain(String[]args){
//啟動線程
MyThreadthread=newMyThread();
newThread(thread).start();
//你的其它的工作,此時線程在運行中
//你不想讓線程幹活了,停掉它
//注意,這只是一個標志,具體線程何時停,並不能精確控制
thread.allDone=true;
}
}
{
booleanvolatileallDone=false;
publicvoidrun(){
//每次循環都檢測標志
//如果設置停止標志時已經在循環里
//則最長需要等待一個循環的時間才能終止
while(!allDone){
//循環里的工作
}
}
}
『陸』 java停止當前程序
break return此外continue也能終止本次循環,從線程方面講可以使用 Thread.currentThread().stop(); Thread.currentThread()是獲取當前線程的方法,然後調用Thread的stop()方法終止線程,如果不想異常拋出錯誤,可以自定義一個異常類,捕捉異常即可
『柒』 java怎麼殺掉java進程
java中有調用外部程序的類,Runtime.getRuntime().exec("./**.exe");此函數返回的是一個Process 對象,該對象在創建後,可以對它進行 destroy () 殺掉子進程、 waitFor () 導致當前線程等待,如有必要,一直要等到由該 Process 對象表示的進程已經終止。 如下例子可以殺掉已經打開的文本進程:
importjava.io.BufferedReader;
importjava.io.InputStreamReader;
publicclassTest
{
publicstaticvoidmain(String[]args)
{
try
{
String[]cmd=
{"notepad.exe"};
Processproc=Runtime.getRuntime().exec(cmd);//開啟文本
BufferedReaderin=newBufferedReader(newInputStreamReader(proc
.getInputStream()));
Stringstring_Temp=in.readLine();
while(string_Temp!=null)
{
System.out.println(string_Temp);
if(string_Temp.indexOf("notepad.exe")!=-1)
Runtime.getRuntime().exec("Taskkill/IMnotepad.exe");
string_Temp=in.readLine();
}
}
catch(Exceptione)
{
//結束進程
}
}
結果如下:
『捌』 java程序通過命令停止
tasklist命令找到該程序的進程,taskkill殺掉該進程。
tomcat的啟動、結束bat都是調用org.apache.catalina.startup.Bootstrap這個類實現的,startup.bat最終會執行Bootstrap.java里的
publicvoidstart()throwsException{
if(catalinaDaemon==null)init();
Methodmethod=catalinaDaemon.getClass().getMethod("start",(Class[])null);
method.invoke(catalinaDaemon,(Object[])null);
}
shutdown.bat最終會執行Bootstrap里的
publicvoidstopServer()throwsException{
Methodmethod=catalinaDaemon.getClass().getMethod("stopServer",(Class[])null);
method.invoke(catalinaDaemon,(Object[])null);
}
你也可以這樣寫一個類來控製程序的啟動、終止,bat就調用對應的方法。
『玖』 什麼情況下OOM會終止java進程
防止重要的系統進程觸發(OOM)機制而被殺死:可以設置參數/proc/PID/oom_adj為-17,可臨時關閉linux內核的OOM機制。內核會通過特定的演算法給每個進程計算一個分數來決定殺哪個進程,每個進程的oom分數可以/proc/PID/oom_score中找到。我們運維過程中保護的一般是sshd和一些管理agent。
保護某個進程不被內核殺掉可以這樣操作:
# echo -17 > /proc/$PID/oom_adj
如何防止sshd被殺,可以這樣操作:
# pgrep -f "/usr/sbin/sshd" | while read PID;do echo -17 > /proc/$PID/oom_adj;done
可以在計劃任務里加入這樣一條定時任務,就更安全了:
#/etc/cron.d/oom_disable
*/1**** root pgrep -f "/usr/sbin/sshd" | while read PID;do echo -17 > /proc/$PID/oom_adj;done
為了避免重啟失效,可以寫入/etc/rc.d/rc.local
echo -17 > /proc/$(pidof sshd)/oom_adj
至於為什麼用-17而不用其他數值(默認值為0),這個是由linux內核定義的,查看內核源碼可知:
以linux-3.3.6版本的kernel源碼為例,路徑為linux-3.6.6/include/linux/oom.h,閱讀內核源碼可知oom_adj的可調值為15到-16,其中15最大-16最小,-17為禁止使用OOM。oom_score為2的n次方計算出來的,其中n就是進程的oom_adj值,所以oom_score的分數越高就越會被內核優先殺掉。
當然還可以通過修改內核參數禁止OOM機制
# sysctl -w vm.panic_on_oom=1
vm.panic_on_oom = 1 //1表示關閉,默認為0表示開啟OOM
# sysctl -p
『拾』 java進程怎麼安全關閉
就是有個main方法在死循環的查數據處理數據。然後要更新代碼,不能直接kill呀,kill會把正在處理的數據弄丟,就需要在個監控,可以再跑的過程里讓他停止讀取數據,然後把內存里的數據處理完了再關閉