Как узнать запущен ли процесс?
Когда его запускаю, то все работает, но со временем, он перестает работать.
Перезапускаю его и он опять работает
Как проверить, что он работает в текущий момент?
1) Проверяю pid, он существует:
2) Проверяю процессы:
Запускаю его через rc-local.service, для этого создал файл
PS. «watcher.py stop» прописал, так как иногда выдает ошибку, что он уже запущен. Наверное смотрит, что PID создан.
Создал службу, прописал в файле
/etc/systemd/system/rc-local.service
Дал ему права и поставил в запуск:
PS. Думаю поставить его на ежедневную перезагрузку в cron. Но пока интересно, как отследить его «падение».
Linux List Processes – How to Check Running Processes
Bolaji Ayodeji
Every day, developers use various applications and run commands in the terminal. These applications can include a browser, code editor, terminal, video conferencing app, or music player.
For each of these software applications that you open or commands you run, it creates a process or task.
One beautiful feature of the Linux operating system and of modern computers in general is that they provide support for multitasking. So multiple programs can run at the same time.
Have you ever wondered how you can check all the programs running on your machine? Then this article is for you, as I’ll show you how to list, manage, and kill all the running processes on your Linux machine.
Prerequisites
- A Linux distro installed.
- Basic knowledge of navigating around the command-line.
- A smile on your face 🙂
A Quick Introduction to Linux Processes
A process is an instance of a running computer program that you can find in a software application or command.
For example, if you open your Visual Studio Code editor, that creates a process which will only stop (or die) once you terminate or close the Visual Studio Code application.
Likewise, when you run a command in the terminal (like curl ifconfig.me ), it creates a process that will only stop when the command finishes executing or is terminated.
How to List Running Processes in Linux using the ps Command
You can list running processes using the ps command (ps means process status). The ps command displays your currently running processes in real-time.
To test this, just open your terminal and run the ps command like so:
This will display the process for the current shell with four columns:
- PID returns the unique process ID
- TTY returns the terminal type you’re logged into
- TIME returns the total amount of CPU usage
- CMD returns the name of the command that launched the process.
You can choose to display a certain set of processes by using any combination of options (like -A -a , -C , -c , -d , -E , -e , -u , -X , -x , and others).
If you specify more than one of these options, then all processes which are matched by at least one of the given options will be displayed.
The ps command manual page.
To display all running processes for all users on your machine, including their usernames, and to show processes not attached to your terminal, you can use the command below:
Here’s a breakdown of the command:
- ps : is the process status command.
- a : displays information about other users’ processes as well as your own.
- u : displays the processes belonging to the specified usernames.
- x : includes processes that do not have a controlling terminal.
This will display the process for the current shell with eleven columns:
- USER returns the username of the user running the process
- PID returns the unique process ID
- %CPU returns the percentage of CPU usage
- %MEM returns the percentage memory usage
- VSV returns the virtual size in Kbytes
- RSS returns the resident set size
- TT returns the control terminal name
- STAT returns the symbolic process state
- STARTED returns the time started
- CMD returns the command that launched the process.
How to List Running Processes in Linux using the top and htop Commands
You can also use the top task manager command in Linux to see a real-time sorted list of top processes that use the most memory or CPU.
Type top in your terminal and you’ll get a result like the one you see in the screenshot below:
An alternative to top is htop which provides an interactive system-monitor to view and manage processes. It also displays a real-time sorted list of processes based on their CPU usage, and you can easily search, filter, and kill running processes.
htop is not installed on Linux by default, so you need to install it using the command below or download the binaries for your preferred Linux distro.
Just type htop in your terminal and you’ll get a result like the one you see in the screenshot below:
How to Kill Running Processes in Linux
Killing a process means that you terminate a running application or command. You can kill a process by running the kill command with the process ID or the pkill command with the process name like so:
To find the process ID of a running process, you can use the pgrep command followed by the name of the process like so:
To kill the iTerm2 process in the screenshot above, we will use any of the commands below. This will automatically terminate and close the iTerm2 process (application).
Conclusion
When you list running processes, it is usually a long and clustered list. You can pipe it through less to display the command output one page at a time in your terminal like so:
or display only a specific process that matches a particular name like so:
I hope that you now understand what Linux processes are and how to manage them using the ps , top , and htop commands.
Make sure to check out the manual for each command by running man ps , man top , or man htop respectively. The manual includes a comprehensive reference you can check if you need any more help at any point.
Как проверить, запущен ли процесс в Linux
Я пытаюсь автоматически проверить, запущен ли процесс или нет, и соответственно выполнить следующие шаги. Я написал bash-скрипт, но он не работает.
Является ли моя if утверждение неправильно использовано?
ВЕСЬ Ваш if выглядит хорошо. Почему бы тебе не запустить его и не узнать самому? Мне потребовалась минута, чтобы скопировать if в файл и запустить его. — Olaf Dietsche
Я его запускал, а он не работает, поэтому и спросил — noMAD
Как это «не работает? Что вы получаете, когда удаляете перенаправление вывода? — Ansgar Wiechers
@noMAD, потому что он на самом деле предназначен именно для этого и не порождает дополнительную подоболочку. — jordanm
Для справки в будущем, размещение вопроса с бессмысленным утверждением «это не работает» и отсутствие информации о том, что означает «это не работает», делает его очень плохим вопросом, который, вероятно, будет стоить вам репутации. — Ken White
10 ответы
Вы не хотите знать, запущен ли конкретный процесс (с известным pid) (это можно сделать, проверив, если /proc/1234/ существует для pid 1234), но если какой-то процесс выполняет данную команду (или данный исполняемый файл).
Обратите внимание, что убить (2) syscall можно использовать для переноса, чтобы проверить, запущен ли данный процесс (с сигналом 0, например kill(pid,0) ). Изнутри программы это обычный способ проверить, что процесс с известным pid все еще существует и работает (или ожидает).
Вы могли бы использовать pidof команда, чтобы найти процессы, выполняющие какой-либо исполняемый файл, например pidof zsh найти все zsh процессы. Вы также можете использовать killall -s 0 zsh
HackWare.ru
Этичный хакинг и тестирование на проникновение, информационная безопасность
Азы работы в командной строке Linux (часть 7)
- Азы работы в командной строке Linux (часть 1)
- Азы работы в командной строке Linux (часть 2)
- Азы работы в командной строке Linux (часть 3)
- Азы работы в командной строке Linux (часть 4)
- Азы работы в командной строке Linux (часть 5)
- Азы работы в командной строке Linux (часть 6)
В этой части мы научимся наблюдать за процессами в Linux, это может быть полезным для решения проблем с производительностью. Например, система медленно работает из-за того, что какая-то программа полностью использует центральный процессор или заняла всю оперативную память. Мы научимся находить и останавливать процессы, которые потребляют больше всего ресурсов, просматривать все запущенные процессы, менять их приоритет и выполнять другие действия с ними.
top для показа процессов в реальном времени
У программы top есть опции, но большую часть настройки можно сделать интерактивными командами в запущенной программе. Для запуска выполните:
В самом верху информация об использовании ресурсов центрального процессора и оперативной памяти. Если ваша система «тормозит», работает медленно, то посмотрите, что именно происходит: полностью загружен процессор или закончилась память.
На моём скриншоте проблем с производительностью нет, но давайте представим, что полностью загружен центральный процессор. Процессы отсортированы по уровню потребления времени ЦПУ — от самого прожорливого (то есть в порядке убывания). Чтобы убедиться в этом нажмите кнопку x — будет подсвечен столбец по которому выполняется сортировка.
Если закончилась оперативная память, то нужно сделать сортировку процессов по потреблению памяти. Для переключения столбца нажимайте клавиши < и >. Это не символы курсорных клавишей. Это символы на английской раскладке, которые на русской раскладке находятся на буквах «б» и «ю». Чтобы отправить этот символ, нужно нажать Shift+, (запятая) и Shift+. (точка).
Теперь процессы отфильтрованы по столбцу %MEM (память):
Как можно увидеть, на моей системе больше всего памяти потребляет процесс libreoffice (офисные приложения) и chromium (веб-браузер).
Для включения/отключения цвета: z
Для включения/отключения полужирных шрифтов: b
Для показов команды запуска: c
Для включения и отключения древовидного вывода процессов: V (то есть Shift+v)
Можно выводить до четырёх отдельных вкладок (окон) программы top в одном окне — в каждой из них можно сделать разные настройки вывода. Подробности смотрите в статье «Как пользоваться командой top для наблюдения за процессами в Linux».
htop — простая альтернатива top
В программе top можно искать (фильтровать) процессы, останавливать их, менять порядок и тип выводимых столбцов. Но каждое это действие выполняется командой, которую нужно помнить — это неудобно. В программе htop самые востребованные функции по управлению процессами назначены на функциональные клавиши F1-F12 и информация о них всегда присутствует на экране. То есть программа htop похожа на top, но проще в использовании:
Программа htop по умолчанию раскрашена цветами, выводит команды процессов и подсвечивает колонку, по которой выполняется сортировка.
systemctl для просмотра состояния служб
Если вам интересует, что происходит с определённой службой — запущена ли она, возникла ли ошибка при запуске или с ней всё в порядке, то вместо поиска службы для интерактивного показа процессов или снимка процессов, удобнее использовать команду systemctl.
Службы (демоны) работают в фоне, примеры популярных служб: sshd, apache2 (веб-сервер в Debian и производных), httpd (веб-сервер в Arch Linux и производных), iptables (файервол).
К примеру, меня интересует, запущена ли служба SSH сервера на компьютере, на котором я в данный момент работаю, тогда мне нужно выполнить следующую команду:
Служба SSH сервера не запущена.
Просмотр статуса веб-сервера:
ps для получения снимка процессов
Программы top и htop выводят на экран постоянно обновляемую информацию о процессах, а программа ps выводит информацию один раз на момент выполнения программы.
Программу ps удобно использовать, если нужно просто проверить, запущен ли определённый процесс, либо узнать идентификатор процесса, либо для работы с процессами в скриптах. Кстати, программа top тоже умеет выводить снимок процессов — в инструкции, на которую выше дана ссылка, написано как это сделать.
Чтобы вывести список всех активных процессов:
В таком списке удобно искать с помощью grep:
ps -e | grep firefox
Следующая команда выведет все процессы (-e), для процессов будут показаны поля Идентификатор процесса, Идентификатор родительского процесса, потребление времени ЦПУ, потребление памяти, команда и аргументы, которой был запущен процесс (-o pid,ppid,pcpu,pmem,args), будет показано дерево процессов (—forest) и процессы будут отсортированы по использованию процессора в порядке убывания (—sort -pcpu):
Интересный пример комбинирования команд ps с watch и head — будет выведен список топ-10 процессов, потребляющих оперативную память, этот список будет обновляться каждую секунду:
Как и предыдущая команда, но для потребителей ЦПУ:
lsof для показа открытых файлов
Файлы открываются процессами. Иногда нужно знать, какие файлы открыл процесс или каким процессом открыт файл. Это может понадобиться для мониторинга активности процессов, либо для решения проблем, когда невозможно выполнить действие из-за того, что какой-то процесс использует файл.
Чтобы увидеть, какой процесс открыл файл, нужно указать путь до этого файла:
В качестве файла могут быть устройства, например, жёсткий диск:
Чтобы увидеть все файлы, которые открыты в определённом каталоге, используйте опцию +D и укажите путь до каталога, например, для просмотра всех открытых файлов в директории /var/log/ и открывших их процессов:
В столбце COMMAND показано имя процесса, открывшего файл, а в столбце PID показан идентификатор процесса.
Чтобы увидеть все файлы, которые были открыты из каталога /home:
Чтобы показать все открытые на дисках файлы:
Чтобы увидеть файлы, которые были открыты определенным процессом, используйте параметр -c КОМАНДА:
pstree для вывода дерева процессов
Программа pstree показывает дерево процессов, то есть связи между родительскими и дочерними процессами:
pgrep для поиска процесса
Вместо запуска ps и последующей фильтрации с помощью grep можно использовать одну команду pgrep, которая запускается так:
Например, для поиска процесса firefox:
Если процесс найден, то будет выведен его идентификатор (PID), а если процесс не найден, то ничего не будет выведено.
Если указать опцию -a, то заодно будет выведен и полный путь до исполнимого файла:
kill, pkill и killall для остановки процесса
Чтобы закрыть, выключить процессы используются команды:
Разница между командами pkill и killall в том, что pkill принимаемое ИМЯ_ПРОЦЕССА использует для поиска как по всему имени, так и по части имени. А killall по умолчанию ищет точное совпадение имени процесса. То есть если вместо «firefox» указать «firef», то pkill закроет все процессы firefox, а killall не закроет ни одного процесса.
Как увидеть сообщения, которые выводят процессы
Если при запуске утилиты в командной строке что-то не в порядке (например, отсутствует необходимая зависимость), то программа перед завершением работы выводит сообщение об ошибке. На самом деле, в консоль могут выводиться не только ошибки, но и обычные сообщения о работе программы. К тому же, не только программы с интерфейсом командной строки выводят сообщения, но и программы с графическим интерфейсом, а также демоны (процессы, отсоединённые от терминала), также выводят сообщения, которые хранятся в системных журналах.
Чтобы увидеть ошибки и сообщения, которые выводят процессы запустите команду вида:
Например, чтобы увидеть сообщения от процесса sshd:
Если добавить опцию -f, то новые сообщения будут выводиться по мере их появления:
Это работает и для приложений с графическим интерфейсом:
Чтобы увидеть все сообщения от любых служб, выполните такую команду (может пригодиться при выяснении причин, почему не работает веб-сервер, MySQL или SSH сервер или почему не запускается OpenVPN и т.д.):
Чтобы показать записи в системном журнале одного процесса с указанным PID: