我需要檢查一個非java進程是否正在運行(按進程名稱)在一個java程序中 - 與Java - how to check whether another (non-Java) process is running on Linux中的問題非常相似。
解決方案沒問題,但它仍然需要打開系統調用過程,我想避免這種情況。
是否有純java方式來獲取在Linux上運行的進程列表?如何檢查某個進程是否正在運行 - java on linux
0
A
回答
2
可能的解決方案可能是資源管理器proc條目。的確,這就是top
和其他人如何訪問正在運行的進程列表。
我不能完全肯定,如果這是你要找的,但它可以給你一些線索:
import java.awt.Desktop;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
public class OpenFolder {
public static void main(String[] args) throws IOException {
System.out.println(findProcess("process_name_here"));
}
public static boolean findProcess(String processName) throws IOException {
String filePath = new String("");
File directory = new File("/proc");
File[] contents = directory.listFiles();
boolean found = false;
for (File f : contents) {
if (f.getAbsolutePath().matches("\\/proc\\/\\d+")) {
filePath = f.getAbsolutePath().concat("/status");
if (readFile(filePath, processName))
found = true;
}
}
return found;
}
public static boolean readFile(String filename, String processName)
throws IOException {
FileInputStream fstream = new FileInputStream(filename);
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
String strLine;
strLine = br.readLine().split(":")[1].trim();
br.close();
if (strLine.equals(processName))
return true;
else
return false;
}
}
0
不,沒有純java的方式如何做到這一點。原因可能是,這個過程是相當平臺相關的概念。請參閱How to get a list of current open windows/process with Java?(您也可以在Linux中找到有用的提示)
+0
Java是平臺獨立的,所以這不是原因。但我花了足夠的時間尋找解決方案,並沒有找到一個...所以我想'ps'它是。 – csny
1
在Java 9會有一個標準的API來解決這個問題稱爲ProcessHandle
。您甚至可以嘗試下載JDK9預覽。下面是一個例子:
public class ps {
public static void main(String[] args) {
ProcessHandle.allProcesses()
.map(p -> p.getPid()+": "+p.info().command().orElse("?"))
.forEach(System.out::println);
}
}
它打印所有進程的pid和命令行(如果知道)。在Windows和Linux中運行良好。
相關問題
- 1. 如何檢查Linux中是否正在運行進程?
- 2. 如何檢查進程是否正在運行 - Linux
- 3. 檢查進程是否正在運行
- 4. PHP檢查進程是否正在運行(Linux)
- 5. 如何檢查進程是否在Red Hat Linux上運行?
- 6. 如何檢查Hadoop守護進程是否正在運行?
- 7. 檢查進程是否正在運行linux shell不能正常工作
- 8. 如何檢查某人是否正在運行我的程序?
- 9. 如何在安裝過程中檢查某個程序是否正在運行?
- 10. 如何知道某個進程是否正在運行?
- 11. 檢查一個進程是否正在Python中運行(在Linux/Unix中)
- 12. 檢查進程是否正在運行(使用進程名稱)
- 13. 如何檢查正在運行的進程是否是後臺進程?
- 14. 檢查在運行時是否正在執行某個方法
- 15. 檢查進程是否在Linux上運行的最佳實踐?
- 16. 檢查程序是否正在運行
- 17. 檢查進程是否正在運行,如果不啓動它
- 18. 如何檢查給定PID的過程是否正在運行?
- 19. 編程檢查某個進程在後臺中運行
- 20. 如何檢查一個進程是否使用Delphi運行?
- 21. 檢查某個特定應用程序是否在運行iOS?
- 22. Bash腳本檢查進程是否正在運行
- 23. 檢查守護進程是否正在運行
- 24. Python檢查當前進程是否正在運行?
- 25. C#:檢查進程是否正在運行問題
- 26. 從Silverlight OOB應用程序如何檢查進程是否正在運行
- 27. 如何檢查應用程序是否正在運行,否則運行它?
- 28. 如何在運行時檢查某個類是否實現了某個接口?
- 29. 如何檢查一個文件是否被另一個進程(Java/Linux)打開?
- 30. 如何檢查Unix進程是否在Perl中運行?
這是一個想法!猜猜你可以使用一些謂詞來使代碼更清晰,但我認爲這應該對我有用 – csny