Получить текущие запущенные процессы

Я работаю над программой, эта программа должна иметь возможность видеть, был ли открыт «поиск» для Mac или «Проводник» для Windows. Я пытаюсь сделать это с помощью учебник. Этот код, который я сейчас получил, похоже, работает для перечисления всех запущенных процессов.

Но проблема в том, что это не текущие запущенные, то есть в нем будут перечислены процессы, которые были запущены в 14:00, даже если сейчас 3:00 или около того. Это означает, что если бы я должен был проверить, содержат ли перечисленные процессы Finder или File Explorer, он вернет true, несмотря ни на что, поскольку это похоже на системное приложение, которое работает все время и не может быть закрыто, как обычный загруженный .exe, единственный способ закрыть его — перезапустить Finder или Explorer. Первоначально это приводит к обновлению списка процессов с помощью средства поиска или проводника. Но обычно при открытии поисковика или проводника в качестве пользователя вы не перезапускаете приложение каждый раз, вы просто открываете проводник или проводник, который не запускает новый процесс выполнения, что немного усложняет его. чтобы проверить, был ли он только что открыт или нет.

Я хотел бы знать, есть ли способ изменить мой код, чтобы можно было проверить, был ли только что запущен процесс поиска или проводника. Его нужно запускать только тогда, когда он только что запущен, а не в том случае, если он уже запущен. Я перечислил код, который я использую ниже здесь.

package readPList;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class MyProcReader {
    public static void main(String[] args) {
        try {
            String process;

            Process p = Runtime.getRuntime().exec("ps -few");
            BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
            while ((process = input.readLine()) != null) {
                System.out.println(process); 

            }
            input.close();
        } catch (Exception err) {
            err.printStackTrace();
        }
    }
}

Для Mac я использую строку "ps -few" в строке "getRuntime()", а для Windows я использую строку System.getenv("windir") +"\\system32\\"+"tasklist.exe"


person Community    schedule 28.01.2017    source источник


Ответы (2)


Для Mac я предлагаю еще один способ — использовать AppleScript, который позволяет проверить, запущено ли приложение. Вы можете интегрировать Applescript в java.

Пожалуйста, найдите следующие ссылки: проверить, работает ли приложение в AppleScript, см. раздел ответа об обновлении.

person py563    schedule 28.01.2017
comment
Я ценю вклад, я собираюсь проверить это. Это как плагин, как расширенная библиотека, или мне нужно установить что-то конкретное, чтобы сделать Applescript доступным для Java? - person ; 28.01.2017
comment
Нет, AppleScript ссылка — это язык сценариев, предоставляемый Apple, больше похожий на сценарии VBA в Windows. Пожалуйста, проголосуйте за ответ, если он покажется вам полезным после вашего исследования. Спасибо - person py563; 28.01.2017

Новая Java 9 предоставляет API ProcessHandle (который выполняет собственный вызов):

ProcessHandle.allProcesses().forEach(p -> System.out.println(p.pid()));
person user218046    schedule 08.03.2020