![](/img/trans.png)
[英]Java - how to check whether another (non-Java) process is running on Linux
[英]How to check is a certain process is running - java on linux
我需要檢查Java程序內是否正在運行非Java進程(按進程名稱)(與Java中的問題非常相似) 如何檢查Linux上是否正在運行另一個(非Java)進程 。
解決方案還可以,但是它仍然需要打開系統調用流程,我想避免這種情況。
有沒有一種純Java的方法來獲取Linux上正在運行的進程的列表?
在Java 9和更高版本中,有一個解決此問題的標准API稱為ProcessHandle
是一個示例:
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上運行良好。
一個可能的解決方案可能是瀏覽器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;
}
}
不,沒有純Java方法。 造成這種情況的原因可能是,流程是完全依賴於平台的概念。 請參閱如何使用Java獲取當前打開的窗口/進程的列表? (您也可以在那里找到有關Linux的有用技巧)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.