2.3.5.1 Процессы в РЕД ОС
Скачать документРабота с процессами
Список запущенных процессов
Завершение процесса
Практически в любом контексте можно заменить слово «процесс» терминами «программа», «команда» или «задача». Внутри Linux-подобных систем нет принципиальных отличий между программой и командой. Обычно программы с текстовым выводом информации, например, ls, часто называются «командами».
Чтобы создать процесс, необходимо запустить на выполнение какой-либо исполняемый файл, то есть файл, у которого установлен атрибут «исполняемый». Иногда говорят, что надо «выполнить файл» или «выполнить команду».
После того как содержимое запущенного файла будет считано и помещено в оперативную память, а также будут размещены необходимые для работы программы данные, процесс начнет своё существование. Такой «живой» процесс иногда называют «задачей». Отсюда можно сформулировать определение: процесс — это совокупность программного кода и данных, загруженных в память вычислительного устройства.
Процесс может находиться в различных состояниях, обычно выделяют три основных состояния:
работающий процесс — в данный момент времени код процесса выполняется, т.е. процесс занимает определенную часть ресурсов центрального процессора (процессорного времени);
спящий процесс — в данный момент времени код процесса не выполняется, находясь в ожидании какого-либо события (например, нажатия клавиш на клавиатуре, поступление данных по сети и т.д.);
процесс-«зомби» — состояние, когда сам процесс уже не существует, его код и данные выгружены из оперативной памяти, но запись в таблице процессов остаётся по тем или иным причинам.
Запустить программу или породить процесс можно двумя способами:
1) вводом имени команды в терминале и нажатием «Enter»;
2) нажатием ЛКМ по пиктограмме приложения в Главном меню или на Рабочем столе.
Вы можете подробнее ознакомиться с процессами, просмотрев наши обучающие видео:
на RuTube — Процессы в среде РЕД ОС;
в Яндекс.Дзен — Процессы в среде РЕД ОС;
в VK Видео — Процессы в среде РЕД ОС.
На наших каналах вы также сможете найти много другой полезной информации.
Работа с процессами
В качестве примера запустим приложение «Калькулятор» из командной строки, для чего необходимо открыть окно терминала и выполнить команду:
mate-calc
Затем откроем второе окно терминала и выполним последовательно команды ps
и ps -a
:
Вывод команд отличается.
Команда ps (proccesses) — это утилита командной строки, позволяющая работать со списком процессов в системе. Вызванная без параметров, она выводит список процессов, запущенных в данном терминале — в выводе показано, что были запущены командная оболочка bash и сама утилита ps.
Ключ -a позволяет вывести все интерактивные процессы, запущенные данным пользователем — в выводе команды отображается mate-calc, который был выполнен из другого терминального окна.
При закрытии окна терминала, из которого запускался калькулятор, будет закрыто и само приложение «Калькулятор». Обычно процессы связаны с терминалом, из которого они запускались. Такой терминал называется управляющим терминалом для процесса.
Именно названия терминалов были указаны в колонке TTY вывода запущенных ранее команд ps
и ps -a
— pts/0 и pts/1.
Важно также отметить, что калькулятор после запуска занял терминал — командная строка не появилась и процесс интерактивной работы с консолью в этом окне стал невозможным.
Когда необходимо выполнить программу так, чтобы она не занимала терминальное окно, следует запустить процесс как демон (так, например, выполняются службы в Windows). Для этого в качестве последнего аргумента командной строки указывается символ «&»:
Калькулятор запускается, а терминал доступен для дальнейшей работы. Однако, если снова закрыть окно терминала, калькулятор также прекратит работу. То есть управляющий терминал, даже если он предоставляет возможность дальнейшей работы с ним, всё равно является важным звеном в работе порождённого процесса.
В случае, когда необходимо освободить терминал для работы и сделать запущенный процесс независимым, используется команда nohup
, которая отвязывает процесс от управляющего терминала:
Теперь можно закрыть терминальное окно, а калькулятор продолжит свою работу. Причём в выводе команды ps
данный процесс уже не будет отображен.
Список запущенных процессов
Чтобы увидеть весь список процессов, запущенных пользователем, включая не имеющие управляющего терминала, следует добавить ключ -x (ps -ax
):
В конце выведенного списка отображается mate-calc
, напротив которого вместо имени терминала стоит знак вопроса.
В первом столбце списка процессов отображаются некоторые числовые значения — это идентификаторы процессов — PID (Proccess IDentificator), являющиеся «именами», по которым ядро операционной системы общается с процессами.
В третьем столбце списка запущенных процессов (STAT) находятся сокращённые обозначения состояния процесса:
R — процесс выполняется в данный момент времени;
I — простаивающий процесс;
D — процесс выполняется, но ожидает ввода/вывода;
S — спящий процесс;
T — процесс остановлен, но пока не удалён из списка процессов и не выгружен его код из памяти;
X — процесс мёртв, то есть код и данные находятся в памяти, но процесс не отзывается;
Z — процесс-«зомби».
Каждый процесс инициализируется в сеансе какого-либо пользователя, и этот пользователь становится владельцем процесса. Если управляющий терминал можно убрать, то владельца у процесса изъять невозможно, однако его можно сменить на другого пользователя.
Таким образом, все файловые операции, которые будет выполнять процесс (если в программе это заложено), будут реализовываться в соответствии с правами доступа пользователя — владельца процесса.
Для просмотра владельца процесса утилитой ps используется ключ -u. Выполните команду:
ps -aux
В первом столбце списка процессов теперь будут отображены имена пользователей — владельцев процесса.
Например, при попытке сохранить файл LibreOffice Writer в каталоге /etc — будет выведено сообщение об ошибке, информирующее о том, что сохранение невозможно из-за недостатка прав. Такая ситуация возникает, потому что процесс редактора LibreOffice Writer запускается с правами локального пользователя, а права на запись в паку /etc имеет только суперпользователь root (в чём можно убедиться в выводе команды ls -l /etc
)!
Завершение процесса
Для завершения какого-либо запущенного процесса используется утилита kill. В качестве аргумента утилите необходимо передать PID процесса, который можно уточнить с помощью описанных выше команд. Подробную информацию об использовании утилиты kill см. в нашей статье «Основные утилиты в консоли РЕД ОС».
Следует обратить внимание на то, что пользователь может завершить только тот процесс, для которого он является владельцем. Администратор root может посылать любые сигналы любому процессу в системе, следовательно, может и прекратить работу любого процесса.
Дата последнего изменения: 09.09.2024
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.