Управление процессами

Что такое PID или как мониторить и завершать запущенные процессы.

Время чтения: 5 мин

Управление процессами

Скопировано

В Windows управление процессами сводится к диспетчеру задач, который имеет графический интерфейс пользователя. С помощью этой утилиты можно запускать и останавливать разные процессы. В Unix-подобных операционных системах, которые являются изначально многопользовательскими, предусмотрены довольно развитые механизмы управления процессами.

Все процессы в Unix-подобных операционных системах делятся на фоновые (background) и приоритетные (foreground). В статье «Интерфейс командной строки» описано использование терминала для запуска приоритетных процессов. Приоритетный режим означает, что терминал будет ожидать завершения процесса и не будет доступен для ввода новых команд до его завершения.

Иногда удобнее использовать фоновый процесс. Например, если мы хотим все время посылать запросы сетевому устройству с помощью команды ping, как это было описано в статье «Работа с сетью» (ключ -i устанавливает количество секунд между запросами к серверу):

        
          
          ping 8.8.8.8 -i 15 &> [1] <PID>
          ping 8.8.8.8 -i 15 &
> [1] <PID>

        
        
          
        
      

Символ & в конце строки команды и означает запуск процесса в фоновом режиме. <PID> (от Process Identifier) — идентификационный номер процесса. Зная его, можно отслеживать состояние процесса, подавать ему сигналы или управлять им напрямую средствами операционной системы. [1] — обозначает номер задания (фонового процесса пользователя, который запущен из данного терминала).

Если запустить другой процесс, например, посылать запросы к другому сетевому устройству, то вы увидите, что номер сменился:

        
          
          ping 8.8.4.4 -i 10 &> [2] <PID>
          ping 8.8.4.4 -i 10 &
> [2] <PID>

        
        
          
        
      

Изменится также и PID. Вы можете посмотреть список задач, для этого используется команда:

        
          
          jobs> [1]  - running    ping 8.8.8.8> [2]  + running    ping 8.8.4.4
          jobs
> [1]  - running    ping 8.8.8.8
> [2]  + running    ping 8.8.4.4

        
        
          
        
      

Чтобы перевести процесс из фонового в приоритетный режим, можно использовать команду fg. Если выполнить её без аргументов, то она переведёт последний фоновый процесс в приоритетный режим. В нашем случае это будет процесс под номером [2].

Запустим процесс в приоритетном режиме и нажмём сочетание клавиш Ctrl Z:

        
          
          ping 8.8.8.8 -i 15^Z> [1]  + 22495 suspended  ping 8.8.8.8 -i 15
          ping 8.8.8.8 -i 15
^Z
> [1]  + 22495 suspended  ping 8.8.8.8 -i 15

        
        
          
        
      

Вызовем список процессов с помощью jobs:

        
          
          jobs> [1]  + suspended  ping 8.8.8.8 -i 15
          jobs
> [1]  + suspended  ping 8.8.8.8 -i 15

        
        
          
        
      

suspended означает, что процесс остановлен и стоит на паузе. Его можно продолжить командой bg и перевести в фоновый режим:

        
          
          bg> [1]  + 22495 continued  ping 8.8.8.8 -i 15> 64 bytes from 8.8.8.8: icmp_seq=1 ttl=108 time=28.854 msjobs> [1]  + running    ping 8.8.8.8 -i 15
          bg
> [1]  + 22495 continued  ping 8.8.8.8 -i 15
> 64 bytes from 8.8.8.8: icmp_seq=1 ttl=108 time=28.854 ms

jobs
> [1]  + running    ping 8.8.8.8 -i 15

        
        
          
        
      

Приоритет процесса

Скопировано

Иногда случается, что запущенный процесс съедает слишком много ресурсов CPU, и тогда его начинает не хватать для обработки других, не менее, а иногда даже более важных процессов. В этом случае можно использовать команды nice и renice для изменения приоритета.

Приоритет процесса, обычно указывается в диапазоне от -20 до 20. Чем меньше значение (ниже нуля) тем выше приоритет.

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

        
          
          nice -n 20 tar -czvf /path/to_save_archive.tar.gz /path/to_big_folder
          nice -n 20 tar -czvf /path/to_save_archive.tar.gz /path/to_big_folder

        
        
          
        
      

Чтобы изменить приоритет уже запущенной задачи, используйте команду renice:

        
          
          renice -n 20 -p PID
          renice -n 20 -p PID

        
        
          
        
      

Мониторинг процессов

Скопировано

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

Можно просмотреть в реальном времени нагрузку на процессор, состояние оперативной памяти, состояние своп-файла и все процессы, запущенные не только из текущего терминала:

        
          
          top
          top

        
        
          
        
      

Утилита top используется для мониторинга состояния операционной системы. С помощью нажатия клавиши Q на клавиатуре можно выйти из top, а нажатие клавиши ? позволяет вывести справку по использованию этой утилиты. На операционных системах семейства Linux чаще пользуются утилитой htop, которая имеет более простой интерфейс.

Чтобы получить полный отчёт именно о процессах используют утилиту ps. Название утилиты образовалось от «Process Status». Выполнение этой команды в терминале приведёт к выводу списка терминалов. А если добавить ключ -A, вы получите список всех текущих процессов в операционной системе:

        
          
          ps -A
          ps -A

        
        
          
        
      

Ключ -f используется, чтобы информация о процессах была более детализирована:

        
          
          ps -Af
          ps -Af

        
        
          
        
      

Команда kill используется для остановке процесса:

        
          
          kill <PID>
          kill <PID>

        
        
          
        
      

PID — это номер (идентификатор) процесса, который можно получить помощью утилиты ps или top. Номер процесса будет указан в левой колонке таблицы.

Остановка процесса произойдёт, если в коде программы процесса описан ответ на сигнал SIGKILL. Но процесс можно завершить принудительно командой:

        
          
          sudo kill -9 <PID>
          sudo kill -9 <PID>

        
        
          
        
      

Обычно операционная система попросит выполнить эту команду с директивой sudo.