Как проверить запущено ли приложение linux

Как проверить запущена ли программа

Как проверить, запущена ли заданная программа?
Здравствуйте, дорогие программисты! Помогите сделать программу, которая будет проверять включена ли.

Как проверить, запущена ли заданная программа
Помогите сделать программу каторая все время будет проверять включена ли программа каторая задана.

Как проверить с какими правами запущена программа ?
Как на С проверить с какими правами запущена программа (от имени user или admin ) Если.

Как проверить, что программа запущена (избежать повторного запуска)?
Знаю, что можно с помощью FindWindow, но вдруг FindWindow найдет просто другую программу с похожим.

Добавлено через 1 минуту

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Как проверить, что программа запущена (избежать повторного запуска)?
Знаю, что можно с помощью FindWindow, но вдруг FindWindow найдет просто другую программу с похожим.

Как через delphi проверить, запущена другая программа или нет?
Здравствуйте уважаемые программисты ! целый день не могу понять как сделать простою проверку.

Проверить, запущена ли программа
Такая ситуация у меня свой сервер на нем стоит программа, и она по каким то причинам сама.

Проверить запущена ли программа от имени администратора
Для работы моей программы нужно что бы она была запущена от имени администратора иначе происходит.

Проверить от какого пользователя запущена программа
Можно ли проверить от какого пользователя запущена программа? Просто для моей программы нужен.

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

Источник

Список процессов Linux

На сайте уже есть несколько статей про процессы Linux, в которых подробно описано как ими управлять или как завершить один или группу процессов, но это еще не все. Чтобы правильно управлять процессами и ориентироваться в них вам нужно научиться анализировать список процессов Linux, понимать что значит каждый пункт и зачем он нужен.

В этой статье мы подробно рассмотрим как посмотреть список процессов различными способами, разберем какими бывают процессы, почему так происходит и что с этим делать.

Список процессов в Linux

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

  • Процесс — если говорить простыми словами, это программа и её данные, загруженные в память компьютера;
  • Дочерний процесс — процессы могут запускать другие процессы для выполнения параллельных задач или других целей такие процессы называются дочерними. Для них выделяется отдельная область в памяти;
  • Поток — поток отличается от процесса тем, что использует ту же память, данные и дескрипторы файлов, что и процесс, в котором он был создан.

1. Утилита ps

Самый простой способ посмотреть список процессов, запущенных в текущей командой оболочке, использовать команду ps без параметров:

Но вряд-ли вас интересует именно это. Чтобы посмотреть все процессы, добавьте опцию -e, а для максимально подробной информации — опцию -F:

Вот значение основных колонок в выводе утилиты:

  • UID — имя пользователя, от имени которого работает процесс;
  • PID — идентификатор пользователя;
  • PPID — идентификатор родительского процесса пользователя;
  • C — расходование ресурсов процессора, в процентах;
  • SZ — размер процесса;
  • RSS — реальный размер процесса в памяти;
  • PSR — ядро процессора, на котором выполняется процесс;
  • STIME — время, когда процесс был запущен;
  • TTY — если процесс привязан к терминалу, то здесь будет выведен его номер;
  • TIME — общее время выполнения процесса (user + system);
  • CMD — команда, которой был запущен процесс, если программа не может прочитать аргументы процесса, он будет выведен в квадратных скобках;

Чтобы посмотреть список процессов в виде дерева, и понимать какой процесс имеет какие дочерние процессы, выполните команду:

Читайте также:  Драйвер для принтера hp laserjet p2015d для windows

Для просмотра списка процессов с потоками используйте опцию -L:

Здесь появятся ещё две дополнительных колонки:

  • LWP — Это сокращение от LightWeight Proccess. Идентификатор потока;
  • NLWP — количество потоков у этого процесса.

Чтобы посмотреть список процессов определенного пользователя, например, sergiy используйте опцию -u:

Теперь давайте перейдём к другим, более интересным, интерактивным утилитам.

2. Утилита top

Утилита top не поставляется вместе с системой, поэтому вам придется её установить. Для этого в Ubuntu выполните:

sudo apt install top

Программа позволяет интерактивно просматривать список запущенных процессов Linux. Чтобы вывести список процессов Linux выполните команду:

Колонки, которые выводит программа очень похожи на ps:

  • PID — идентификатор процесса;
  • USER — имя пользователя, от имени которого выполняется процесс;
  • PR — приоритет планировщика, установленный для процесса;
  • NI — рекомендуемый приоритет процесса. Это значение можно менять, может не совпадать с реальным приоритетом планировщика;
  • VIRT — всё, что находится в памяти, используется или зарезервировано для использования;
  • RES — всё, что находится в оперативной памяти и относится к процессу. Расшифровывается как Resident Memory Size, указывается в килобайтах;
  • SHR — часть памяти из RES, которую занимают ресурсы, доступные для использования другим процессам. Расшифровывается — Shared Memory Size.
  • S — состояние процесса: D — ожидает завершения операции, R — запущен, S — спит, T — остановлен, t — остановлен отладчиком, Z — зомби;
  • %CPU — процент использования ресурсов процессора;
  • %MEM — процент использования ресурсов оперативной памяти на основе колонки RES;
  • TIME — обще процессорное время, которое процесс использовал с момента запуска;
  • COMAND — команда, с помощью которой был запущен процесс.

Для того чтобы сделать вывод программы цветным, нажмите Z:

Чтобы вывести дерево процессов Linux нажмите сочетание клавиш Shift+V:

Для отображения потоков нажмите Shift + H:

Если вам недостаточно стандартных полей с информацией о процессах, вы можете нажать Shift + F и выбрать дополнительные поля, которые надо отображать. Для выбора или удаления поля используйте пробел:

3. Утилита htop

Это ещё более мощная утилита для просмотра запущенных процессов в Linux. Пользоваться ею намного удобнее. Здесь поддерживаются не только горячие клавиши, но и управление мышью. А ещё она выводит всё в цвете, поэтому смотреть на данные намного приятнее. Для установки программы выполните:

sudo apt install htop

Для того чтобы запустить выполните в терминале:

Колонки, которые вы увидите в выводе программы, аналогичны тем, что доступны в top, поэтому я не буду рассматривать их здесь отдельно. Для настройки выводимых данных нажмите кнопку F2, затем перейдите в раздел Display Options:

Здесь надо отметить Tree view для вывода списка процессов в виде дерева, а также снять отметки с пунктов Hide threads. для отображения потоков. Здесь есть как потоки пространства пользователя userland process threads, так и потоки пространства ядра — kernel threads. Теперь всё это будет отображаться:

Для того чтобы настроить какие колонки будут отображаться используйте пункт меню Columns:

Тут вы можете выбрать какие колонки отображать, а какие нет, а также можете настроить их порядок.

4. Программа Gnome Monitor

Вы можете смотреть запущенные процессы не только в терминале, но и в графическом интерфейсе. Для этого можно использовать утилиту Gnome Monitor. У неё намного меньше возможностей, по сравнению даже с ps, но зато у неё есть графический интерфейс. Вы можете запустить программу из главного меню системы:

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

Теперь программа отображает все запущенные процессы Linux в системе. Здесь вы можете выполнять поиск по процессам, завершать их и многое другое. Но потоков и дерева процессов программа не показывает.

5. Утилита atop

Эта программа тоже позволяет посмотреть процессы в Linux , но немного в другом ключе. Утилиту больше интересует сколько тот или иной процесс потребляет ресурсов системы. Утилита даже может показывать потребление процессами пропускной способности диска и сети, но для этого ей необходим специальный патч ядра. Для установки программы в Ubuntu выполните:

sudo apt install atop

Читайте также:  Создание сборок windows своими руками

Затем запустите её:

Вот основные колонки, которые выводит утилита и их значения:

  • PID — идентификатор процесса;
  • CID — идентификатор контейнера, используется для контейнеров Docker;
  • SYSCPU — время, потраченное процессом на выполнение в пространстве ядра;
  • USRCPU — время, потраченное процессом на выполнение в пространстве пользователя;
  • VGROW — увеличение использования памяти колонки VIRT за последний период;
  • RGROW — увеличение использования памяти колонки RSS за последний период;
  • ST — статус процесса, N — новый, E — завершенный, S и С — процесс завершен принудительно с помощью сигнала;
  • EXC — код выхода или код сигнала, которым был завершен процесс;
  • THR — общее количество потоков в этом процессе;
  • S — состояние процесса, аналогично описанному для top;
  • CPUNR — номер ядра процессора, на котором запущен основной поток процесса;
  • CPU — процент использования ресурсов процессора;
  • CMD — команда, которой была запущена программа;
  • MEM — процент использования памяти;

Для того чтобы включить отображение потоков процесса нажмите y:

Для просмотра информации о памяти нажмите m, если хотите вернутся обратно, нажмите g:

Выводы

В этой статье мы разобрали самые основные способы посмотреть список процессов в Linux, как видите есть простые способы, но есть и более сложные и информативные. Какими способами вы пользуетесь чаще всего? Напишите в комментариях!

Источник

Команда Linux / Unix, чтобы определить, запущен ли процесс?

мне нужна независимая от платформы (Linux/Unix|OSX) команда shell/bash, которая определит, запущен ли конкретный процесс. например, mysqld , httpd . Какой самый простой способ/команда для этого?

14 ответов

пока pidof и pgrep являются отличными инструментами для определения того, что работает, они оба, к сожалению, недоступны в некоторых операционных системах. Определенный fail safe был бы использовать следующее: ps cax | grep command

вывод на Gentoo Linux:

выход на OS X:

в Linux и OS X grep возвращает код выхода, поэтому легко проверить, был ли найден процесс или не:

кроме того, если вы хотите список PIDs, вы можете легко grep для тех, а также:

чьи выходные данные одинаковы в Linux и OS X:

вывод следующей пустой строки, что делает этот подход безопасным для процессов, которые не работают:

этот подход подходит для написания простой пустой строки проверьте, а затем даже повторите обнаруженные PIDs.

вы можете проверить его, сохранив его в файл (с именем «running») с разрешениями на выполнение (chmod +x running) и выполнив его с параметром: ./running «httpd»

внимание.

пожалуйста, имейте в виду, что вы просто анализируете вывод ps ax что означает, что, как видно из вывода Linux, он не просто соответствует процессам, но и аргументам перешел в эту программу. Я настоятельно рекомендую быть как можно более конкретным при использовании этого метода (например, ./running «mysql» также будет соответствовать процессам «mysqld»). Я настоятельно рекомендую использовать which чтобы проверить полный путь, где это возможно.

ссылки:

вы должны знать PID !

Поиск процесса, пытаясь сделать какое-то распознавание шаблонов на аргументах процесса (например, pgrep «mysqld» ) — это стратегия, которая рано или поздно обречена на провал. Что делать, если у вас есть два mysqld работает? Забудьте об этом подходе. Вы можете временно сделать все правильно, и это может работать в течение года или двух, но затем происходит что-то, о чем вы не думали.

only the process id (pid) поистине уникально.

всегда хранить pid когда вы запускаете что-то в фоновом режиме. В Bash это можно сделать с помощью $! переменная Bash. Вы избавите себя от стольких хлопот, сделав это.

как определить, работает ли процесс (по pid)

теперь возникает вопрос, Как узнать, работает ли pid.

это POSIX и, следовательно, портативный. Он вернет сам pid, если процесс запущен, или ничего не вернет, если процесс не запущен. Строго говоря, команда вернет один столбец, pid , но поскольку мы дали пустой заголовок заголовка (материал, непосредственно предшествующий знаку равенства), и это единственный запрошенный столбец, команда ps не будет использовать заголовок вообще. Это то, что мы хотим, потому что это облегчает синтаксический анализ.

это будет работать на Linux,BSD, Solaris и т. д.

другой стратегией было бы проверить значение выхода из вышеуказанного . Он должен быть равен нулю, если процесс запущен и ненулевой, если это не так. Спецификация POSIX говорит, что ps должен выйти >0, если произошла ошибка, но мне неясно, что представляет собой «ошибка». Поэтому я лично не использую эту стратегию, хотя я уверен, что она будет работать также на всех платформах Unix/Linux.

Читайте также:  Big windows with view

на большинстве дистрибутивов Linux, вы можете использовать pidof (8).

он будет печатать идентификаторы всех экземпляров указанных процессов, или ничего, если нет запущенных случаях.

например, в моей системе (у меня есть четыре экземпляра bash и один раз remmina под управлением):

на других Юниксов, pgrep или комбинацию ps и grep достигнет того же самого, что и другие по праву указывать.

самый простой способ-использовать ps и grep:

Если ваша команда имеет некоторые аргументы команды, то вы также можете поместить больше «grep cmd_arg1» после «grep $command», чтобы отфильтровать другие возможные процессы, которые вас не интересуют.

пример: покажите мне, если какой-либо процесс Java с аргументом:

Это должно работать на большинстве вкусов Unix, BSD и Linux:

  • SunOS 5.10 [отсюда PATH=. ]
  • Linux 2.6.32 (CentOS)
  • Linux 3.0.0 (Ubuntu)
  • Дарвин 11.2.0
  • FreeBSD 9.0-STABLE
  • Red Hat Enterprise Linux ES выпуск 4
  • Red Hat Enterprise Linux Server выпуска 5

просто незначительное дополнение: если вы добавите -c флаг для ps, вам не нужно удалять строку, содержащую процесс grep с grep -v далее. Т. е.

это все, что вам нужно для ввода в системе bsd-ish (включая MacOSX), вы можете оставить -u если вам нужно меньше информации.

о системе, где генетика родного ps командная точка обратно в SysV, вы бы использовали

для a список, содержащий больше, чем просто pid и имя процесса. Конечно, вы можете выбрать конкретные поля для печати с помощью .

собирая различные предложения вместе, самая чистая версия, которую я смог придумать (без ненадежного grep, который запускает части слов), это:

kill -0 не убивает процесс, но проверяет, существует ли он, а затем возвращает true, если у вас нет pidof в вашей системе, сохраните pid при запуске процесса:

затем в скрипте:

Я использую pgrep -l httpd но не уверен, что она присутствует на любой платформе.
Кто может подтвердить на OSX?

вы должны знать PID вашего процесса.

когда вы запустите его, его PID будет записан в $! переменной. Сохраните этот PID в файл.

затем вам нужно будет проверить, соответствует ли этот PID запущенному процессу. Вот полный скелет сценария:

на основе ответ of peterh . Трюк для зная, если данный ПИД работает в ps -o pid= -p $PID инструкция.

этот подход можно использовать в случае, если команды «ps», «pidof» и rest недоступны. Я лично очень часто использую procfs в своих инструментах/скриптах/программах.

небольшое объяснение, что происходит:

  1. — m1-остановить процесс на первом матче
  2. «mysqld$ / httpd$» — grep будет соответствовать строкам, которые закончились на mysqld или httpd
  3. / proc / 1 * — bash будет соответствовать строке, которая началась с любого числа
  4. cut-просто разделить вывод разделителем ‘ / ‘ и извлечь поле 3

это выводит количество процессов, базовым именем которых является «chromium-browser»:

если это печатает «0», процесс не выполняется. Команда предполагает, что путь процесса не содержит пробела. Я не тестировал это с приостановленными процессами или процессами зомби.

проверена с помощью gwak как awk альтернативы в Linux.

вот более универсальное решение с некоторым примером использования:

вот моя версия. Особенности:

  • проверяет точное имя программы (Первый аргумент функции). поиск » mysql «не будет соответствовать запуску»mysqld»
  • поиск аргументов программы (второй аргумент функции)

ни один из ответов не сработал для меня, поэтому вот мой:

это удаляет возврат каретки, созданный терминалом. Остальное можно объяснить этой пост.

следующая функция оболочки, основанная только на стандартных командах и параметрах POSIX, должна работать в большинстве (если не в любой) систем Unix и linux. :

обратите внимание, что он задохнется при передаче сомнительного имени команды «0]», а также не сможет идентифицировать процессы, имеющие встроенное пространство в их именах.

обратите внимание также, что наиболее загруженное и принятое решение требует не переносного ps options и безвозмездно использует оболочку, которая, несмотря на свою популярность, не гарантируется присутствие на каждой машине Unix / Linux ( bash )

Источник

Оцените статью