簡體   English   中英

如何檢查某個進程是否正在運行-Linux上的Java

[英]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.

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