簡體   English   中英

如何使用 Java 的 ProcessBuilder.start() 暫停進程運行?

[英]How to pause process run using Java's ProcessBuilder.start()?

好的,所以我正在編寫這個程序,它基本上為我批量運行其他 java 程序(多次,不同的參數,並行執行等)。

到目前為止,運行部分效果很好。 使用 ProcessBuilder's.start() 方法(相當於我相信的 Runtime.exec() ),它會創建一個單獨的 java 進程並關閉它。

問題是我希望能夠在這些進程啟動后暫停/停止這些進程。 使用簡單的線程,這通常很容易做到,但是外部進程似乎沒有任何用於等待/睡眠的內置功能,至少從外部角度來看沒有。

我的問題是:有沒有辦法暫停 java.lang.Process object? 如果沒有,是否有人知道任何包含此功能的相關 exec 庫? 排除所有這些,擴展 Process 是一個更可行的選擇嗎?

我的問題是:有沒有辦法暫停 java.lang.Process object?

您可能已經發現,標准 API 不支持此功能。 例如Process沒有提供suspend() / resume()方法。

如果沒有,是否有人知道任何包含此功能的相關 exec 庫?

在 POSIX 兼容的操作系統(例如 GNU/Linux 或 Mac OS)上,您可以使用另一個系統調用(使用Runtime.execProcessBuilder或一些本機實現的庫)來發出kill命令。

使用kill命令,您可以發送信號,例如SIGSTOP (暫停進程)和SIGCONT (恢復進程)。

(您將需要掌握外部程序的進程 ID。圍繞着這個問題有很多問題答案。)

您將需要創建一個用於在進程之間發送消息的系統。 你可以這樣做:

  1. 發送信號,取決於操作系統。 (如 aioobe 筆記。)
  2. 讓一個進程偶爾檢查另一個進程可以創建/刪除的文件是否存在。 (如果正在讀取/寫入文件,則需要使用文件鎖定。)
  3. 讓您的“主”進程在端口上偵聽,並在啟動子進程時告訴他們(通過命令行參數)如何在啟動時“打電話回家”。 這兩個程序在工作和檢查處理消息之間交替。

根據您的描述(復雜批處理環境中的所有 Java 程序),我建議 #3,TCP/IP 通信。

雖然它肯定涉及額外的工作,但它也使您可以靈活地在不同進程之間發送您想要的任何類型的命令或信息。

Process 表示在機器上運行的一個單獨的進程。 Java 絕對不允許您通過 java.lang.Process 暫停它們。 可以使用Process.destroy()強制停止它們。 對於暫停,您將需要生成進程的合作。

這些是什么類型的過程? 你寫的嗎?

暫無
暫無

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

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