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