java控制語句中的經(jīng)典問題 Java進(jìn)程和操作系統(tǒng)進(jìn)程有什么關(guān)系?
Java進(jìn)程和操作系統(tǒng)進(jìn)程有什么關(guān)系?Java進(jìn)程是創(chuàng)建操作系統(tǒng)的進(jìn)程,即JVM中創(chuàng)建的每個進(jìn)程對應(yīng)操作系統(tǒng)中的一個進(jìn)程。但是為了給用戶更好更方便的使用,Java對用戶屏蔽了一些平臺相關(guān)的信息。使用C
Java進(jìn)程和操作系統(tǒng)進(jìn)程有什么關(guān)系?
Java進(jìn)程是創(chuàng)建操作系統(tǒng)的進(jìn)程,即JVM中創(chuàng)建的每個進(jìn)程對應(yīng)操作系統(tǒng)中的一個進(jìn)程。但是為了給用戶更好更方便的使用,Java對用戶屏蔽了一些平臺相關(guān)的信息。
使用C/C創(chuàng)建系統(tǒng)進(jìn)程時,可以進(jìn)行PID值,通過這個PID可以直接操作相應(yīng)的進(jìn)程。但在JAVA中,用戶只能通過實例的引用來操作。當(dāng)參考丟失或不可用時,他們可以 我不知道任何關(guān)于進(jìn)展的信息。
使用Java進(jìn)程時需要注意一些事情:
Java提供的輸入輸出的流水線能力是非常有限的。如果不及時讀取,會導(dǎo)致進(jìn)程暫停,甚至死鎖。當(dāng)創(chuàng)建一個進(jìn)程來執(zhí)行Windows下的系統(tǒng)命令時,如dir、copy等。您需要運行Windows的命令解釋器,command.exe/cmd.
java如何實現(xiàn)了cmd多條命令交互操作?
在java中調(diào)用操作系統(tǒng)程序時,可以使用()。exec()來實現(xiàn),但是這個方法調(diào)用命令后直接返回到當(dāng)前線程;在設(shè)計程序時,有時只有在等待被調(diào)用的系統(tǒng)程序完成其操作后,當(dāng)前線程才能進(jìn)行下一步操作。這時可以用類進(jìn)程的方法waitFor()來實現(xiàn),它會阻塞上一個線程,直到調(diào)用程序運行完畢。流程()。exec()//執(zhí)行命令以生成多維數(shù)據(jù)集try {
process.waitFor()
} catch (InterruptedException e) {
// TODO自動生成的catch塊
()
}
proc_stat checkFil: 3
[java]查看純文本
流程()。exec()//執(zhí)行生成多維數(shù)據(jù)集的命令。
嘗試{
process.waitFor()
} catch (InterruptedException e) {
// TODO自動生成的catch塊
()
}
proc_stat checkFil: 3
流程的waitFor()方法引自API文檔:
等待
public abstract int waitFor()
Throws InterruptedException導(dǎo)致當(dāng)前線程等待,直到Process對象表示的進(jìn)程終止(如果需要)。如果子進(jìn)程已經(jīng)終止,此方法將立即返回。如果子進(jìn)程沒有終止,調(diào)用線程將被阻塞,直到子進(jìn)程退出。
返回:
流程的導(dǎo)出值。按照慣例,0表示正常終止。
投擲:
如果當(dāng)前線程在等待時被另一個線程中斷,它將停止等待并拋出一個InterruptedException。
自我練習(xí):
執(zhí)行多個cmd命令。
string cmd cmd/c G: ampamp CD g:projectstestproject ampamp start mvn包
處理流程()。執(zhí)行(指令)
process.waitFor()
process.exitValue()
這允許執(zhí)行多個命令。
值得注意的是,執(zhí)行start mvn包時,會打開一個窗口,調(diào)用process.waitFor()。主線程不會被阻塞,但會返回成功執(zhí)行的process.exitValue() 0。
移除start mvn包中的start后,主線程會一直阻塞,直到cmd命令啟動的子進(jìn)程執(zhí)行完畢,然后執(zhí)行主線程。