![](/img/trans.png)
[英]Connecting to server via SSH using Java - JSch and issuing shell commands
[英]Passing pipes into shell commands via Java application
我需要找出某個進程(java.exe)在Java Webapp中使用了多少內存。
我嘗試了以下方法:
Process proc = Runtime.getRuntime().exec("tasklist /v | find \"java.exe\"");
BufferedReader stdInput = new BufferedReader(new InputStreamReader(proc.getInputStream()));
BufferedReader errInput = new BufferedReader(new InputStreamReader(proc.getErrorStream()));
但這返回以下內容:
錯誤:無效的參數/選項-'|'。
輸入“ TASKLIST /?” 使用。
我知道這是因為管道是Shell的功能,並且在傳遞給Shell之前由Java解析。
我也嘗試過:
String[] procString = {
"cmd",
"/c",
"tasklist /v | find \"java.exe\""
};
Process proc = Runtime.getRuntime().exec(procString);
但這不會向BufferedReader返回任何內容。
有沒有辦法將正確的輸出輸入到Webapp中?
在exec()函數返回之前,必須定期使用stdInput和errInput流。 每當緩沖區已滿時,exec()函數都會阻塞。 也就是說,當沒有空間可寫入緩沖區時,通過exec()函數執行的命令不會繼續執行。 要解決此問題,請在另一個線程中的每個緩沖區已滿后讀取緩沖區。
對於進入Java程序的人來說,這是一個容易犯的錯誤。 如果已定義流,則必須使用它(通過read函數)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.