鍍金池/ 問(wèn)答/Java  Linux/ Java下執(zhí)行shell語(yǔ)句

Java下執(zhí)行shell語(yǔ)句

如題,我的代碼如下:
Process process = null;
process = RunTime.getRunTime().exec("/usr/bin/killall vsftpd");
process.waitFor();
process = RunTime.getRunTime().exec("/usr/sbin/vsftpd &");
process.waitFor();

我能正常kill掉vsftpd,但是無(wú)法啟動(dòng)vsftpd,我在終端下鍵入"/usr/sbin/vsftpd &"是可以的,請(qǐng)教這個(gè)是什么問(wèn)題?
如果我把vsftpd換成telnetd可以正常kill和start。

經(jīng)過(guò)測(cè)試我把&和process.waitFor();拿掉就可以起來(lái)了,但還是不了解這到底是為什么?為什么加了&就沒(méi)調(diào)用到vsftpd呢?

回答
編輯回答
兔囡囡

為何非要這么啟動(dòng),用service manager管理不好嗎?操作系統(tǒng)自帶,絕對(duì)官方最佳實(shí)踐。

service vsftpd start
2018年8月20日 10:34
編輯回答
忠妾

加&時(shí)候可能有其他消息輸出,你代碼里沒(méi)有處理輸出流,可能是阻塞了。參考這個(gè)文章中“不幸的是,這個(gè)程序也無(wú)法執(zhí)行完成,它沒(méi)有輸出但卻一直懸在那里,這是為什么那?”的解釋,可能對(duì)你有用。

2017年5月30日 18:22