Процессы и потоки в Linux

Данный конспект в доработке

    Процессы

    Процесс - это абстракция виртуализации
    Ядро linux предоставляет каждому процессу, многозадачность, виртуализированный процессор, виртуальную память
    Процессы - это объектный код, находящийся в процессе выполнения, который содержит в себе не только код, но и данные, ресурсы и виртуализированный процесс.
    Объектный код, понятный для исполнения на машине и ядру ( наиболее распространенный в linux формат исполняемых и компонуемых файлов ELF ) или по другому исполняемый формат содержит метаданные и множество разделов с кодом и данными
    Разделы - это линейные фрагменты объектного кода загружаемые в память, имеют одинкаковые права и цели исполнения
    Самый важный раздел - текстовый и bss
    В текстовом разделе содержатся исполняемый код и данные только для чтения, в том числе константы и переменные
    В разделе данных хранятся инициализированные переменные, обычно данный раздел доступен для чтения и записи
    Раздел bss содержит инициализированные глобальные данные
    Кроме вышеизложенного процесс ассоциирован с различными ресурсами, которые выделяются и управляются ядром. Процессы запрашивают и манипулируют ресурсами посредством системных вызовов.
    В качестве ресурсов процессора могут относиться таймеры, ожидающие сигналы, открытые файлы, сетевые соединения, аппаратное обеспечение, механизмы межпроцессорного взаимодействия,
    Ресурсы процессора, данные и статистика о нем сохраняются внутри ядра в дескрипторе процессора, адресное пространство, в котором отображается один или несколько объектов(потоков) выполнения кода, а также сегмент данных содержащий глобальные переменные.
    Новый процессы в linux создаются с помощью системного вызова fork(). В результате этого вызова создается дубликат вызывающего процесса
    Если родительский процесс завершается раньше дочернего, то ядро переназначает предка для потомка. После завершения процесса, он какое то время еще живет в системе, ядро сохряняет фрагменты процесса в памяти, обеспечивая процессу-предку доступ к информации. Такое запрашивание называется обслуживанием завершенного процесса.
    Процесс, который уже завершился, но еще не был обслужен, называется зомби

    Потоки

    Каждый процесс состоит из одного или нескольких потоков выполнения
    Поток - это еденица активности в процессе, отвечает за выполнение кода и поддержки процесса в рабочем состоянии
    Процесс состоящий из нескольких потоков называется многопоточным
    Поток состоит из стека в котором хранятся локальные переменные, состояния процесса и местоположения в объектном коде
    В каждом из потоков содержатся уникальный счетчик команд (program counter), стек процесса и набор регистров процессора.
    Планировщик ядра управляет выполнением отдельных потоков, а не процессов Местоположение кода хранится в указателе команд процесса
    Адресное пространство делится между всеми потоками

    В современных операционной системах процессы предусматривают наличие двух виртуальных ресурсов: виртуального процессора и виртуальной памяти
    Благодаря виртуальному процессору для процессов создается илюзия, что они монопольно используют всю систему, однако по факту, физическим процессором могут пользоваться другие процессы
    Тоже самое можно сказать о виртуальной памяти
    Потоки находятся в общей виртуальной памяти процесса, но каждый из них выполняется в своем виртуальном процессоре
    Сама программа процессом не является, может существовать несколько процессов, которые выполняются одну и ту же программу. Может быть несколько процессов, которые совместно используются одни и те же ресурсы(файлы, адресное пространство)
    Процесс создается в результате вызова системной функции fork, путем копирования уже существующего
    Процесс, который вызвал функцию fork, называется порождающим или родительским, а новый процесс называется порожденным или дочерним
    Возврат из системной функции fork() выполняется из ядра дважды: один раз в родительском процессе, а второй раз — в порожденном.
    Функция exec() позволяет создать новое адресное пространство и загрузить в него новую программу
    Выход из программы осуществляется с помощью системной функции exit(), которая завершает выполнение процесса и освобождает все занятые им ресурсы
    Родительский процесс может создать запрос о состоянии завершенных дочерних процессов с помощью вызова системной функции wait4()
    После завершения процесса он переводится в состояние зомби (zombie), которое используется для представления завершенного процесса до того момента, пока порождающий его процесс не вызовет системную функцию wait() или waitpid()


    Нормальные процессы - это процессы переднего плана, у которых продолжительность жизни ограничивается сеансом, завершаются по истечении определенного времени или выходом пользователя, от которого был запущен процесс
    Осиротевшие процессы - процессы, которые имели родительский процесс, но по какой то причине родительский процесс был завершен непринудительно и родителем осиротевших процессов стал init процесс. Процесс init будет ждать и завершения или остановки
    Процессы демоны - независимые процессы которые намеренно сделаны осиротевшими и после инициации были отключены от контролирующего терминала(родителя), данные процессы работают в фоновом режиме, пока их задание не будет выполнено.
    Процессы хранятся в /proc/ в виде директорий, в этих директориях хранятся данные о процессе
    Например:
    /proc/1/fd - хранит дескрипторы процесса 1 (init), которые в своем большинстве являются сетевыми соединениями или принадлежат каким то файлам
    Удобнее просматривать дескрипторы процесса утилитой lsof, она выводит дополнительную информацию:

    lsof -p 1

    cwd - текущая директория процесса
    rtd - директория процесса выше которой процесс подниматься не может
    txt - бинарный файл
    .so - разделяемая библиотека(в windows dll)
    mem - адресное пространство процесса


    /proc//stat - основная информация процесса
    /proc/stat - общая информация о потреблении cpu процессами

    Команда ps

    Опции команды ps

    l Вывод результата в длинном формате u Вывод в пользовательском формате (показывает имя пользователя и время запуска) j Вывод результата в рабочем формате (показывает идентификаторы GID и SID процесса) s Вывод результата в сигнальном формате v Вывод результата в vm -формате m Отображает состояние памяти f Использует для вывода forest -формат (показывает процессы в виде дерева) a Показывает процессы других пользователей x Показывает процессы, не отображая управляющий терминал S Показывает дочерний CPU, а также время и страницу сбоев c Название команды для task_struct e Показывает состояние после командной строки и а+ w Выводит результат в расширенном формате h Не выводит заголовок r Показывает только запущенные процессы n Показывает числовой вывод для USER и WCHAN txx Показывает процессы, управляемые терминалом ttyxx O Сортирует вывод процессов по ключам к1, к2 и т.д. Pids Показывает только процессы с указанными PID

    В Linux используются три разных синтаксиса
    ps U carol (BSD)
    ps -u carol (UNIX)
    ps --user carol (GNU)

    Чтобы увидеть все процессы, запущенные на терминале (tty), введите ps a:

    ps -a PID TTY TIME CMD 2311 tty2 00:00:00 gnome-session-b 1395764 pts/3 00:00:00 vim 1408543 pts/4 00:00:00 autossh 1408546 pts/4 00:00:00 ssh 1412601 pts/1 00:00:00 ps #найти процессы, запущенные конкретным пользователем: ps -u carol ps -aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.2 0.0 23940 15032 ? Ss апр10 33:23 /usr/lib/systemd/systemd --system --deserialize=70 splash

    a
    Показать процессы, подключенные к tty или терминалу.
    
    u
    Отображение в удобном для пользователя формате.
    
    x
    Показать процессы, не подключенные к tty или терминалу.
    

    USER
    Владелец процесса.
    
    PID
    Идентификатор процесса.
    
    %CPU
    Процент загрузки процессора.
    
    %MEM
    Процент использования физической памяти.
    
    VSZ
    Виртуальная память процесса в килобайтах.
    
    RSS
    Объем физической памяти без подкачки, используемый процессом, в килобайтах.
    
    TT
    Терминал (tty) управляет процессом.
    
    STAT
    Код, представляющий состояние процесса. Помимо S, R и Z (которые мы видели при описании вывода top), возможны и другие значения: D (непрерываемый сон — обычно в ожидании ввода-вывода), T (остановлен — обычно по сигналу управления). Дополнительные модификаторы: < (высокий приоритет — не мешает другим процессам), N (низкий приоритет — не мешает другим процессам) или + (в группе процессов переднего плана).
    
    STARTED
    Время начала процесса.
    
    TIME
    Накопленное время работы процессора.
    
    COMMAND
    Команда, запустившая процесс.
    

    pidof — программа в операционной системе Linux, которая находит идентификатор процесса (PID) работающего процесса(ов) по имени программы и выводит его на стандартный вывод.

    #Узнайте идентификаторы всех процессов, запущенных веб-сервером Apache HTTPD (apache2) pgrep apache2 pidof apache2 #Завершите все apache2 процессов, не используя их идентификаторы pkill apache2 killall apache2 #с помощью kill kill $(pgrep apache2) kill `pgrep apache2` kill $(pidof apache2) kill `pidof apache2`

    ps Также есть o переключатель для выбора отображаемых столбцов.
    Запустите ps так, чтобы отображалась только информация о пользователе, проценте используемой памяти, проценте использования процессорного времени и полной команде:

    ps o user,%mem,%cpu,cmd #запустите ps так, чтобы отображалась только информация о пользователе и названиях используемых им программ: ps -o pid,ruser=RealUser -o comm=Command
    Расшифровка всех возможных кодов состояния процесса
    D Непрерываемый, находящийся в ожидании R Выполняется S Ожидающий T Отслеживается или остановлен Z Нефункциональный процесс-"зомби" W У процесса нет страниц в памяти (процесс свопирован) < Процесс с высоким приоритетом
    N Процесс с низким приоритетом L Некоторые страницы оперативной памяти блокированы

    Процессы заключенные в квадратные скобки - это которые вследствие низкой активности были перекачаны из памяти в пространство подкачки на жестком диске

    top

    Load Average (LA ) рассчитывается как среднее значение загрузки системы за определённый период времени. Как правило, это усреднённые величины за последние 1, 5 и 15 минут
    Пример: load average: 0.08, 0.04, 0.05
    LA высчитывается на основании процессов, которые выполняются и находятся в очереди на выполнение (CPU, RAM, I/O)
    В многоядерной (многопроцессорной) системе значения Load Average (LA) рассчитываются пропорционально числу ядер
    LA нужно сравнивать с количеством ядер процессора. LA = 2 на 2-ядерном процессоре — это высокая загрузка, а LA = 2 на 8-ядерном — вполне нормальная нагрузка.
    Для четырёхядерной системы LA 15 не должен превышать 3,00, для двухядерной — 1,5, а для одноядерной — 0,75
    В выводе утилиты top:
    us - процессорное время потребляемое приложениями
    sy - время потребляемое системой
    ni - время потребляемое пользовательскими процессами с низким приоритетом
    id - время в процентах которое не потребляется, этот показатель должен быть высоким
    wa - время операций ввода вывода. Высокий показатель означает, что процессор очень долго ждет ответы от устройств ввода/вывода. Чаще всего это связано с большим количеством операций на диске.
    hi si - время на обработку аппаратных и программных прерываний
    st - время затраченное виртуальной машиной


    Команды top

    M — сортировка по используемой памяти
    P — сортировка по нагрузке на процессор (используется по умолчанию)
    T — сортировка по времени работы процесса
    A — сортировка по максимальному потреблению различных ресурсов
    u — сортировка по имени пользователя (потребуется ввести имя пользователя)
    k — завершить процесс (потребуется указать его идентификатор, PID)
    n — изменить количество процессов в выводе (потребуется указать нужное количество)
    c — вывести полный путь запущенного процесса


    Более подробно узнать о /proc можно с помощью команды man

    man proc

    top позволяет пользователю взаимодействовать с системой. По умолчанию вывод сортируется по проценту процессорного времени, используемого каждым процессом, в порядке убывания. Это поведение можно изменить, нажав следующие клавиши в top:

    top позволяет пользователю взаимодействовать с системой. По умолчанию вывод сортируется по проценту процессорного времени, используемого каждым процессом, в порядке убывания. Это поведение можно изменить, нажав следующие клавиши в top:
    

    Чтобы переключиться между порядком сортировки по убыванию и по возрастанию, просто нажмите R.

    Другие интересные клавиши для взаимодействия с top:
    ? или h
    Справка.
    
    k
    Команда Kill a process. top запрашивает завершение PID процесса, а также отправку сигнала (по умолчанию SIGTERM или 15).
    
    r
    Измените приоритет процесса (renice). top запросит у вас значение nice . Возможные значения — от -20 до 19, но только суперпользователь (root) может установить значение, которое меньше текущего или является отрицательным.
    
    u
    Список процессов от имени конкретного пользователя (по умолчанию отображаются процессы от имени всех пользователей).
    
    c
    Показывать абсолютные пути к программам и различать процессы пользовательского и системного пространства (в квадратных скобках).
    
    V
    Представление процессов в виде дерева/иерархии.
    
    t и m
    Измените внешний вид индикаторов загрузки процессора и памяти в четыре этапа: при первых двух нажатиях отображаются индикаторы выполнения, при третьем они скрываются, а при четвертом появляются снова.
    
    W
    Сохранить настройки конфигурации в ~/.toprc.
    

    Более продвинутая и удобная версия top — это htop. Другой — возможно, более полный — вариант — atop. Если они еще не установлены в вашей системе, воспользуйтесь менеджером пакетов, чтобы установить их и попробовать.

    Объяснение результатов top
    top Окно вывода данных разделено на две области: область сводки и область задач.
    
    Сводная область в top
    Область сводной информации состоит из пяти верхних строк и содержит следующую информацию:
    
    top - 11:10:29 up 2:21, 1 user, load average: 0,11, 0,20, 0,14
    
    текущее время (в 24-часовом формате): 11:20:29
    
    время работы (сколько времени система находится в рабочем состоянии): up 2:21
    
    количество пользователей, вошедших в систему, и средняя загрузка процессора за последние 1, 5 и 15 минут соответственно: load average: 0,11, 0,20, 0,14
    
    Tasks: 73 total, 1 running, 72 sleeping, 0 stopped, 0 zombie (информация о процессах)
    
    общее количество процессов в активном режиме: 73 total
    
    выполняемых (в процессе выполнения): 1 running
    
    спящих (ждущих возобновления выполнения): 72 sleeping
    
    остановленных (по сигналу управления заданиями): 0 stopped
    
    зомби (завершивших выполнение, но ожидающих, пока родительский процесс удалит их из таблицы процессов): 0 zombie
    
    %Cpu(s): 0,0 us, 0,3 sy, 0,0 ni, 99,7 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st (процент времени работы процессора, затраченный на)
    
    пользовательские процессы: 0,0 us
    
    системные/ядерные процессы: 0,4 sy
    
    процессы с заданным значением nice — чем меньше значение, тем ниже приоритет: 0,0 ni
    
    ничего — время простоя процессора: 99,7 id
    
    процессы, ожидающие операций ввода-вывода: 0,0 wa
    
    процессы, обрабатывающие аппаратные прерывания — периферийные устройства, посылающие процессору сигналы, требующие внимания: 0,0 hi
    
    процессы, обрабатывающие программные прерывания: 0,0 si
    
    процессы, выполняющие задачи других виртуальных машин в виртуальной среде, то есть «крадущие время»: 0,0 st
    
    KiB Mem : 1020332 total, 909492 free, 38796 used, 72044 buff/cache (объем памяти в килобайтах)
    
    общий объем памяти: 1020332 total
    
    неиспользуемая память: 909492 free
    
    используемая память: 38796 used
    
    память, которая буферизуется и кэшируется для предотвращения чрезмерного обращения к диску: 72044 buff/cache
    
    Обратите внимание, что total — это сумма трех других значений — free, used и buff/cache (в нашем случае примерно 1 ГБ).
    
    KiB Swap: 1046524 total, 1046524 free, 0 used. 873264 avail Mem (меняем местами информацию в килобайтах)
    
    общий объем пространства подкачки: 1046524 total
    
    неиспользуемое пространство подкачки: 1046524 free
    
    используемое пространство подкачки: 0 used
    
    объем памяти подкачки, который может быть выделен процессам без дополнительной подкачки: 873264 avail Mem
    
    Рабочая область в top: поля и столбцы
    Под областью сводной информации находится область задач, в которой представлен ряд полей и столбцов с информацией о запущенных процессах:
    
    PID
    Идентификатор процесса.
    
    USER
    Пользователь, выполнивший команду, которая запустила процесс.
    
    PR
    Приоритет процесса для ядра.
    
    NI
    Хорошее значение процесса. Меньшие значения имеют более высокий приоритет, чем большие.
    
    VIRT
    Общий объем памяти, используемый процессом (включая раздел подкачки).
    
    RES
    Оперативная память, используемая процессом.
    
    SHR
    Общая память процесса с другими процессами.
    
    S
    Статус процесса. Возможные значения: S (прерывистый сон — ожидание завершения события), R (выполняемый — либо выполняется, либо находится в очереди на выполнение) или Z (зомби — завершенные дочерние процессы, чьи структуры данных еще не удалены из таблицы процессов).
    
    %CPU
    Процент загрузки процессора процессом.
    
    %MEM
    Процент использования оперативной памяти процессом, то есть значение RES, выраженное в процентах.
    
    TIME+
    Общее время выполнения процесса.
    
    COMMAND
    Имя команды/программы, вызвавшей процесс.
    
    

    #Запустите top так, чтобы задачи были отсортированы по использованию памяти top -o %MEM
    strace
    strace ls

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


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

    strace -p 1

    Следующая опция -с команды покажет в реальном времени какие системные вызовы использует процесс

    strace -c -p 1
    Сигналы

    Сигналы - это механизм, который обеспечивает односторонние асинхронные уведомления.
    Сигнал может быть отправлен от ядра к процессу, от процесса к другому процессу, от процесса к самому себе
    Сигнал может сообщать процессу о каком либо событии, например пользователь нажал ctrl+c или возникла ошибка сегментации памяти


    Ядро linux реализует около 30 разновидностей сигналов, зависит от архитектуры продукта
    Сигналы прерывают исполнение работающего процесса
    Все сигналы за исключением SIGKILL и SIGSTOP, оставляют процессам выбор действий
    Если сигнал не игнорируется, тогда происходит обработка сигнала обработчиком сигнала, после чего контроль переходит обратно инструкции, которая была прервана

    CTRL+C = SIGINT и SIGQUIT
    kill по умолчанию отправляет процессу сигнал SIGTERM, который как SIGINT или SIGQUIT могут быть перехвачены процессом и не дать нужного результата
    Следующие две команды эквивалентны:
    kill -9 2700
    kill -KILL 2700
    Но даже при явном указании сигнала ( в редких случаях ) процесс не исчезает. Такое возможно если процесс уже завершился, но все еще остается в системе, потому как его предок по какой то причине отказался затребовать у ОС подтверждение о завершении. Зомби убить нельзя, он уже мертвый, если только не убить его предка
    Процесс зомби не потребляет ресурсы системы, но остается в таблице процессов
    Другая причина. Процесс мог выполнить системный вызов ( обратился к ОС за определенной услугой ) в ходе выполнения которого система перевела процесс в состояние непрерывного сна. Если процесс не выходит из этого состояния, возможно есть проблемы с устройством, например испорченный диск и вывести процесс из такого состояния невозможно
    Процесс зомби помечается буквой Z ( defunct )
    Процесс состояния "Непрерывного сна" помечается буквой D ( badblocks )

    Сигналы управления процессами

    Доп. информация man signal
    Список всех сигналов:

    $ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX
    Лимит процессов

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


    Лимит выделяется не конкретного процесса, а на все процессы пользователя
    Какие лимиты существуют:

    ulimit -a

    Для управления лимитами существует файл /etc/security/limits.conf
    В нем два вида лимита soft или hard мягкие и жесткие

    Переменные окружения

    /proc/pid/environ
    Переменные окружения динамически изменяемый набор ключей и значений относящихся к конкретному процессу.
    Если при написании приложении необходимо задействовать свою собственную библиотеку функций, можно использовать переменную окружения LD_PRElOAD чтобы указать путь к библиотеке и путь к запуску приложения. Сначала будет загружена библиотека, затем приложение
    Еще одна важная системная переменная LD_LIBRARY_PATH
    Задать переменную окружения export FOO=....


    Лимит PID
    Остановить зомби апокалипсис

    pstack

    Отследить действия процесса, если он не делает системных вызовов, но потребляет ресурсы можно с помощью утилиты pstack

    pstack

    Альтернатива gdb. Есть возможность установить дополнительную библиотеку для отладки glibc-debuginfo

    perf
    Утилита ipcs

    ipcs -m - используется для просмотра текущих сегментов памяти с совместным доступом

    pidof

    Возвращает идентификатор процесса (pid) по его имени

    pstree

    Вывод исполняющихся процессов в виде дерева

    jobs

    jobs - выводит список заданий, исполняющихся в фоне, однако команда ps более информативна
    Такие команды как kill, disown, wait принимают в качестве параметра номер процесса или номер задания
    Команды fg, bg, jobs принимают в качестве параметра, только номер задания

    ~$ sleep 100 & [1] 4848 ~$ jobs [1]+ Запущен sleep 100 & disown 4848

    [1] - номер задания
    4848 - номер процесса
    disown - удаляет задание из таблицы активных заданий командной оболочки
    fg - переводит задания из фона в консоль
    bg перезапускает приостановленное задание в фоновом режиме

    Detached Jobs

    Задания привязаны к сеансу пользователя, который их запускал


    Задания можно отделить от сеанса и запускать даже после его закрытия. Для этого используется команда nohup
    nohup COMMAND &
    & переводит процесс в фоновый режим и освобождает терминал

    #отделим фоновое задание ping localhost от текущего сеанса: chich@host:~$ nohup ping yandex.ru & [1] 1396213 chich@host:~$ nohup: ввод игнорируется, вывод добавляется в 'nohup.out' ^C

    В выводе отображается идентификатор задания ([1]) и идентификатор процесса (1251), а затем сообщение о файле nohup.out. Это файл по умолчанию, в котором будут сохраняться stdout и stderr. Теперь мы можем нажать Ctrl+C, чтобы освободить командную строку, закрыть сеанс, запустить новый сеанс от имени root и с помощью tail -f проверить, выполняется ли команда и записывается ли вывод в файл по умолчанию:

    tail -f nohup.out 64 bytes from yandex.ru (77.88.55.88): icmp_seq=113 ttl=56 time=35.2 ms 64 bytes from yandex.ru (77.88.55.88): icmp_seq=114 ttl=56 time=9.72 ms ....

    Вместо стандартного nohup.out вы могли указать выходной файл по своему выбору с помощью nohup ping localhost > /path/to/your/file &.

    kill %1 [1]+ Завершено nohup ping yandex.ru
    kill

    Один из способов узнать PID процесса — использовать команду pgrep, за которой следует название процесса

    pgrep sleep 1395129 #Чтобы завершить несколько экземпляров одного и того же процесса, можно использовать команду killall killall sleep

    Подобно pgrep, pkill команда завершает процесс по его имени:
    pkill sleep
    И pkill и killall работают примерно так же, как kill: они отправляют сигнал завершения указанному процессу (процессам). Если сигнал не указан, по умолчанию отправляется SIGTERM . Однако kill принимает в качестве аргумента только идентификатор задания или процесса.
    Сигналы можно указать следующим образом:

    #Имя: $ kill -SIGHUP 1247 #Число: $ kill -1 1247 #Опция $ kill -s SIGHUP 1247

    Чтобы kill работал так же, как pkill или killall (и нам не пришлось сначала выяснять PID), можно использовать подстановку команд:

    kill -1 $(pgrep sleep) #or kill -1 `pgrep sleep`

    Полный список всех kill сигналов и их кодов можно найти, введя kill -l в терминале. Используйте -KILL (-9 или -s KILL) для завершения процессов, если не сработал ни один другой сигнал.

    Команда watch

    Команда выполняется до тех пор, пока ее не прервут, поэтому нам нужно остановить ее с помощью Ctrl+C. В качестве вывода мы получаем две строки: первая соответствует watch и сообщает нам, как часто будет выполняться команда (Every 2.0s: uptime), за какой командой/программой нужно следить (uptime), а также имя хоста и дату (debian: Tue Aug 20 23:31:27 2019). Вторая строка вывода — это время безотказной работы, которое включает в себя текущее время (23:31:27), время работы системы (up 21 min), количество активных пользователей (1 user) и среднюю нагрузку на систему или количество процессов, находящихся в состоянии выполнения или ожидания, за последние 1, 5 и 15 минут (load average: 0.00, 0.00, 0.00).

    watch uptime
    Источники
    Последнее изменение: 28.05.2026 08:34


    Связанные темы
    Здесь пока нет комментариев
    Добавлять комментарии могут только авторизованные пользователи

    Авторизоваться
    Я буду рекламой
    Я тоже буду рекламой
    И я
    ВВЕРХ