簡體   English   中英

什么與ProcessBuilder和Daemons不兼容

[英]What doesn't work well with ProcessBuilder and Daemons

在JavaDoc for ProcessBuilder上,它說明了這一點

創建進程的方法可能不適用於某些本機平台上的特殊進程,例如本機窗口進程,守護程序進程,Win16 / DOS進程
Microsoft Windows或shell腳本。

我的主要問題是ProcessBuilder與守護程序進程不兼容? 那么ProcessBuilder不能成為啟動這些類型應用程序的可接受方式嗎?

謝謝!

我的猜測(基於我在代碼grep中找到的注釋)是問題在於你必須處理流程的流程,並且這種處理可能是一個問題。

創建進程的方法可能不適用於某些本機平台上的特殊進程,例如本機窗口進程,守護程序進程,Microsoft Windows上的Win16 / DOS進程或shell腳本。 創建的子進程沒有自己的終端或控制台。 其所有標准I / O(即stdin,stdout,stderr)操作將通過三個流(getOutputStream(),getInputStream(),getErrorStream())重定向到父進程。 父進程使用這些流向子進程提供輸入並從子進程獲取輸出。 由於某些本機平台僅為標准輸入和輸出流提供有限的緩沖區大小,因此無法及時寫入輸入流或讀取子進程的輸出流可能導致子進程阻塞甚至死鎖。

它也可能與以下事實有關: Process是一個抽象類,每個JRE / JDK都帶有它自己的平台相關流程實現(例如UNIXProcessWindowsProcess等)。某些操作系統可能只有與打開流程相關的限制,Java不能涵蓋在其文檔中。

再次 - 這只是猜測,代碼並沒有透露太多。

根據我的經驗(在* nix系統和Windows上) - 您的代碼需要在大多數情況下在構建命令行時提供平台感知,如何提供參數(在arguments參數或命令行中)以及如何您構建生成的進程的環境(繼承您的進程的值或自己創建)。 無論如何,這更像是一場反復試驗的游戲。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM