解決這個問題,要看這個進(jìn)程是java程序自定義的進(jìn)程,還是操作系統(tǒng)的進(jìn)程,操作系統(tǒng)的進(jìn)程,又可以分為windows進(jìn)程和Linux進(jìn)程
成都創(chuàng)新互聯(lián)是專業(yè)的江北網(wǎng)站建設(shè)公司,江北接單;提供網(wǎng)站建設(shè)、網(wǎng)站設(shè)計,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行江北網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊,希望更多企業(yè)前來合作!
一、針對操作系統(tǒng)的進(jìn)程:
1,首先java用戶,要具有操作進(jìn)程的權(quán)限
2. 針對windows操作系統(tǒng)的進(jìn)程,比如QQ進(jìn)程:
String?command?=?"taskkill?/f?/im?QQ.exe";??
Runtime.getRuntime().exec(command);
其中:taskkill 是命令名稱,/f /im 是參數(shù),QQ.exe是進(jìn)程的可執(zhí)行文件。
3.針對Linux操作系統(tǒng)
String?command?=?"kill?/f?/im?QQ.exe";??
Runtime.getRuntime().exec(command);
二、在Java程序中自定義的進(jìn)程
思路:在線程中設(shè)置一個標(biāo)志變量,當(dāng)這個變量的值在外界被改變的時候,有機會結(jié)束運行的線程
public?class?T?{
public?static?void?main(String[]?args)?{
//?啟動線程
MyThread?thread?=?new?MyThread();
new?Thread(thread).start();
//?你的其它的工作,此時線程在運行中
//?你不想讓線程干活了,停掉它
//?注意,這只是一個標(biāo)志,具體線程何時停,并不能精確控制
thread.allDone?=?true;
}
}?
class?MyThread?implements?Runnable?{
boolean?volatile?allDone?=?false;
public?void?run()?{
//?每次循環(huán)都檢測標(biāo)志
//?如果設(shè)置停止標(biāo)志時已經(jīng)在循環(huán)里
//?則最長需要等待一個循環(huán)的時間才能終止
while?(!allDone)?{
//?循環(huán)里的工作
}
}
}
分類: 電腦/網(wǎng)絡(luò) 軟件
問題描述:
請問在java在如何關(guān)閉java自己啟動的程序呢?
解析:
我詳細(xì)說一下吧
java程序啟動之后,JVM(java虛擬機)會實例化一個Runtime類,這是一個運行時類實例,包含這個java程序運行的所有信息,一個程序會實例化一個Runtime類且只能實例化一個Runtime類。我們可以通過這個Runtime類實例操作程序的運行。它的exit(int status)方法會終止程序的運行。例:
Runtime.getRuntime().exit(0);
其中參數(shù)status表示狀態(tài),0表示正常退出,非0表示異常退出。非0參數(shù)有什么用呢?
addShutdownHook(Thread hook)方法可以將一個Thread可程序的關(guān)閉hook(掛/聯(lián)系)起來,程序退出前,會執(zhí)行這個方法,這樣我們可以根據(jù)退出狀態(tài)作相應(yīng)的善后操作。
另外,System.exit(int status)也是調(diào)用這個Runtime類實例的退出方法來間接實現(xiàn)程序的退出的。
再加一點,Runtime類可以創(chuàng)建子進(jìn)程,如下:
Process p=Runtime.getRuntime().exec("notepad");
這個語句將會創(chuàng)建一個記事本程序(它是Runtime類創(chuàng)建的子進(jìn)程)
p.destroy();
這個語句終止剛才創(chuàng)建的子進(jìn)程。
1.
public class TestShutDownHook {
2.
public TestShutDownHook() {
3.
doShutDownWork();
4.
}
5.
private void doShutDownWork() {
6.
Runtime run=Runtime.getRuntime();//當(dāng)前 Java 應(yīng)用程序相關(guān)的運行時對象。
7.
run.addShutdownHook(new Thread(){ //注冊新的虛擬機來關(guān)閉鉤子
8.
@Override
9.
public void run() {
10.
//程序結(jié)束時進(jìn)行的操作
11.
System.out.println("程序結(jié)束調(diào)用");
12.
}
13.
});
14.
}
15.
public static void main(String[] args) {
16.
new TestShutDownHook();
17.
for (int i = 0; i 1000; i++) { // 在這里增添您需要處理代碼 }
18.
System.out.println(i);
19.
}
20.
}
21.
}
Process java.lang.Runtime.exec(String command);
在單獨的進(jìn)程中執(zhí)行指定的字符串命令
java.lang.Process
ProcessBuilder.start() 和 Runtime.exec 方法創(chuàng)建一個本機進(jìn)程,并返回 Process 子類的一個實例,該實例可用來控制進(jìn)程并獲取相關(guān)信息。Process 類提供了執(zhí)行從進(jìn)程輸入、執(zhí)行輸出到進(jìn)程、等待進(jìn)程完成、檢查進(jìn)程的退出狀態(tài)以及銷毀(殺掉)進(jìn)程的方法。
創(chuàng)建進(jìn)程的方法可能無法針對某些本機平臺上的特定進(jìn)程很好地工作,比如,本機窗口進(jìn)程,守護(hù)進(jìn)程,Microsoft Windows 上的 Win16/DOS 進(jìn)程,或者 shell 腳本。創(chuàng)建的子進(jìn)程沒有自己的終端或控制臺。它的所有標(biāo)準(zhǔn) io(即 stdin,stdout,stderr)操作都將通過三個流 (getOutputStream(),getInputStream(),getErrorStream()) 重定向到父進(jìn)程。父進(jìn)程使用這些流來提供到子進(jìn)程的輸入和獲得從子進(jìn)程的輸出。因為有些本機平臺僅針對標(biāo)準(zhǔn)輸入和輸出流提供有限的緩沖區(qū)大小,如果讀寫子進(jìn)程的輸出流或輸入流迅速出現(xiàn)失敗,則可能導(dǎo)致子進(jìn)程阻塞,甚至產(chǎn)生死鎖。
當(dāng)沒有 Process 對象的更多引用時,不是刪掉子進(jìn)程,而是繼續(xù)異步執(zhí)行子進(jìn)程。
對于帶有 Process 對象的 Java 進(jìn)程,沒有必要異步或并發(fā)執(zhí)行由 Process 對象表示的進(jìn)程