Как проверить, запущен ли исполняемый файл AppImage?

Привет! Я прохожу курс “от 0 до Linux админа” здесь: https://yodo.im/courses/linux/?v=1d20b5ff1ee9 и у меня возникла проблема, с которой хотел бы получить помощь.

Как можно определить, запущен ли исполняемый файл приложения, упакованного в AppImage? Часто мне нужно программно узнать, работает ли исполняемый файл с определенным именем, но кажется, что стандартные команды, такие как ps или проверка /proc/, не срабатывают для приложений в AppImage.

Например, эмуляторный фронтенд ES-DE имеет исполняемый файл “es-de” и упакован в “ES-DE_x64.AppImage”. Если бы он был установлен или извлечен напрямую в системе, я мог бы просто использовать pgrep -x "es-de", но когда я использую версию AppImage, исполняемый файл не отображается в выводе pgrep, а в ps -a или ps -x я вижу только AppRun или ./ES-DE_x64.AppImage.

Конечно, сам процесс “es-de” не появляется в /proc/ или через ps при использовании AppImage. Есть ли способ (желательно, не специфичный для Ubuntu) проверить, запущен ли “es-de”, даже если он запущен через AppImage? Я готов к цепочечным проверкам, так что любое решение, которое позволит узнать, какое приложение запущено в активном AppImage, будет полезно. Это что-то вроде docker top.

Буду признателен за советы!

Привет! Рад, что ты проходишь курс по Linux и учишься работать с такими вещами, как AppImage. Давай попробуем разобраться с твоим вопросом.

Когда ты запускаешь приложение из AppImage, основным процессом, который выводится в списках процессов, становится AppRun. Этот процесс фактически отвечает за выполнение приложения, а исполняемый файл внутри AppImage, например, es-de, может не отображаться напрямую в списке процессов.

Но есть несколько способов, которые могут помочь тебе проверить, запущено ли приложение:

  1. Посмотреть переменные окружения:
    Иногда приложения устанавливают переменные окружения, которые могут помочь определить, что они запущены. Например, можно попробовать использовать команду printenv и искать там что-то, связанное с es-de.

  2. Использовать pgrep с регулярными выражениями:
    Попробуй использовать pgrep с опцией -f, чтобы искать по полному пути к процессу:

    pgrep -f "es-de"
    

    Это может помочь найти процесс, даже если он запущен через AppImage.

  3. Проверить открытые файлы:
    Ты можешь использовать команду lsof (если она установлена) для поиска открытых файлов или сокетов, связанных с es-de:

    lsof | grep "es-de"
    
  4. Механизм “pidof”:
    Также стоит проверить команду pidof:

    pidof es-de
    

    Это может показать PID процесса, если он каким-то образом отображается.

  5. Скрипты и утилиты:
    Если ничего не сработает, можно попробовать написать небольшие скрипты на bash, которые будут периодически проверять запущенные процессы и их параметры.

Надеюсь, это поможет тебе найти нужное приложение! Если есть еще вопросы, не стесняйся спрашивать! . Я ответил на ваш вопрос?

Спасибо за ответ! У меня все получилось.

Отлично! Рад слышать, что у тебя все получилось! Если возникнут еще вопросы или понадобится помощь, не стесняйся обращаться. :blush: . Я ответил на ваш вопрос?