Linux you have running jobs

Как использовать команду Jobs в Linux

Главное меню » Linux » Как использовать команду Jobs в Linux

Задания имеют три возможных состояния в Linux: передний план, фон и остановлено.

– А что это значит? Чуть позже мы объясним подробнее. Сначала давайте рассмотрим некоторые инструменты, встроенные в команду Jobs.

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

Команда Описание
jobs Список заданий в текущей оболочке
bg %n Отправить процесс в фоновом режиме
fg %n Вывести процесс на передний план

В таблице n представляет собой номер соответствующего идентификатора задания.

Понимание управления заданиями в Linux

А что вообще такое jobs? Задания, процессы и задачи-это слова, которые часто используются взаимозаменяемо.

На самом деле есть некоторые небольшие различия, которые важны для ясности.

Разница может быть сведена к тому, какая сущность обрабатывает задачи. Пользователи владеют заданиями, а ядро-процессами.

В Linux задание может быть одним процессом или иметь несколько дочерних или подпроцессов.

Примером этого может быть задание, которое содержит несколько переданных команд, таких как эта:

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

Как управлять заданиями в Linux

Когда вы открываете новую оболочку, у вас есть возможность создавать свои собственные рабочие места. Фактически, это то, что происходит, когда вы вводите любую команду (или серию команд) в терминал.

На уровне пользователя-из оболочки можно вручную отправлять задания для работы в фоновом режиме, выводить их на передний план или приостанавливать (с помощью ctrl+z).

Итак, давайте рассмотрим на практике то, что вы узнали до сих пор, на нескольких примерах.

Пример 1: отправка заданий в фоновом режиме

Отправить задание на работу в фоновом режиме очень просто. Вам просто нужно добавить свою команду с символом & (амперсанд).

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

Пример 2: Просмотр Заданий

Если вы попытаетесь ввести команду jobs, вы можете быть смущены, что ничего не произошло. Это происходит потому, что в оболочке не было активных заданий. Теперь, когда у вас есть запущенное задание, вы можете запустить команду задания успешно.

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

Пример 3: выведите задания на передний план

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

Если вы следили за этим, это должно привести вас в nano с вашим файлом под названием Linux AndreyEx.

Пример 4: остановите задание с помощью ctrl+z

Вы можете остановить открытые задания с помощью ctrl+z.

Вы можете открыть верхнюю часть, используйте ctrl+z, чтобы приостановить его, просмотреть его в списке заданий, а затем вернуть его на передний план перед закрытием.

Пример 5: Запуск фоновых заданий с помощью bg

Хотя вы можете отправлять задания в фоновом режиме с символом &, это всегда хорошо, чтобы иметь альтернативу. На экране вы видели, как я остановил задание с помощью ctrl+z. я вернул задание в оболочку и на передний план с помощью команды fg %n. Вы можете сделать то же самое, используя bg.

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

Итак, давайте использовать gedit. Мы собираемся сделать следующее:

  • Запустить Gedit
  • Вернитесь в оболочку и нажмите Ctrl+z
  • Отправить его в фоновом режиме для запуска с помощью bg
  • Проверьте список моих заданий, чтобы убедиться, что он запущен
  • Вернитесь на передний план и отправьте системное прерывание, используя Ctrl+c, чтобы завершить его

Бонусный совет по окончанию заданий в Linux

Многие из нас привыкли использовать ctrl+c для завершения заданий в оболочке. Есть еще один способ сделать это, что включение вашего нового знания контроля работы.

Правильно, команда kill может быть использована вместе с идентификатором задания для завершения задания также.

Вывод

Изучение командной строки Linux приближает нас к внутренней работе нашей любимой операционной системы. Контроль учебных заданий дает нам возможность обрабатывать сразу несколько заданий.

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

Linux / Unix: jobs Command Examples

I am new Linux and Unix user. How do I show the active jobs on Linux or Unix-like systems using BASH/KSH/TCSH or POSIX based shell? How can I display status of jobs in the current session on Unix/Linux?

Job control is nothing but the ability to stop/suspend the execution of processes (command) and continue/resume their execution as per your requirements. This is done using your operating system and shell such as bash/ksh or POSIX shell.

jobs command details
Description Show the active jobs in shell
Category Processes Management
Difficulty Easy
Root privileges No
Est. reading time 3 minutes
Table of contents
  • » Syntax
  • » Examples
  • » Show process IDs
  • » Show only jobs that have exited since last notified
  • » Show process IDs only
  • » Only show running jobs
  • » Only show stopped jobs
  • » Options
  • » Video
  • » See also

Purpose

Displays status of jobs in the current shell session.

Syntax

The basic syntax is as follows:

  • No ads and tracking
  • In-depth guides for developers and sysadmins at Opensourceflare✨
  • Join my Patreon to support independent content creators and start reading latest guides:
    • How to set up Redis sentinel cluster on Ubuntu or Debian Linux
    • How To Set Up SSH Keys With YubiKey as two-factor authentication (U2F/FIDO2)
    • How to set up Mariadb Galera cluster on Ubuntu or Debian Linux
    • A podman tutorial for beginners – part I (run Linux containers without Docker and in daemonless mode)
    • How to protect Linux against rogue USB devices using USBGuard

Join Patreon

jobs [options] jobID

Starting few jobs for demonstration purpose

Before you start using jobs command, you need to start couple of jobs on your system. Type the following commands to start jobs:

Finally, run ping command in foreground:

To suspend ping command job hit the Ctrl-Z key sequence.

jobs command examples

To display the status of jobs in the current shell, enter:
$ jobs
Sample outputs:

To display the process ID or jobs for the job whose name begins with “p,” enter:
$ jobs -p %p
OR
$ jobs %p
Sample outputs:

The character % introduces a job specification. In this example, you are using the string whose name begins with suspended command such as %ping .

How do I show process IDs in addition to the normal information?

Pass the -l (lowercase L) option to jobs command for more information about each job listed, run:
$ jobs -l
Sample outputs:

Fig.01: Displaying the status of jobs in the shell

How do I list only processes that have changed status since the last notification?

First, start a new job as follows:
$ sleep 100 &
Now, only show jobs that have stopped or exited since last notified, type:
$ jobs -n
Sample outputs:

Display lists process IDs (PIDs) only

Pass the -p option to jobs command to display PIDs only:
$ jobs -p
Sample outputs:

How do I display only running jobs?

Pass the -r option to jobs command to display only running jobs only, type:
$ jobs -r
Sample outputs:

How do I display only jobs that have stopped?

Pass the -s option to jobs command to display only stopped jobs only, type:
$ jobs -s
Sample outputs:

To resume the ping cyberciti.biz job by entering the following bg command:
$ bg %4

jobs command options

Table 1: From the bash(1) command man page:
Option Description
-l Show process id’s in addition to the normal information.
-p Show process id’s only.
-n Show only processes that have changed status since the last notification are printed.
-r Restrict output to running jobs only.
-s Restrict output to stopped jobs only.
-x COMMAND is run after all job specifications that appear in ARGS have been replaced with the process ID of that job’s process group leader./td>

A note about /usr/bin/jobs and shell builtin

Type the following type command/command command to find out whether jobs is part of shell, external command or both:
$ type -a jobs
$ command -V jobs
Sample outputs:

In almost all cases you need to use the jobs command that is implemented as a BASH/KSH/POSIX shell built-in. The /usr/bin/jobs command can not be used in the current shell. The /usr/bin/jobs command operates in a different environment and does not share the parent bash/ksh’s shells understanding of jobs.

This tutorials is also available in a quick video format:

You learned about jobs command on Linux and Unix-like systems. See also:

  • bash(1) Linux/Unix command man page

🐧 Get the latest tutorials on Linux, Open Source & DevOps via

Источник

Управление заданиями

Наверное всякий nix-оид знает что запуская команду с амперсандом на конце — она уходит в фон, продолжая работу.
Таким образом запущенная команда превращается в job (задание).
Более продвинутые знают что можно вывести список запущенных заданий командой jobs, и переключиться между ними командами fg (вывести фоновую задачу в оболочку)/ bg (отправить остановленное задание в фон). Остальными командами пользуются куда реже, а большинство начинающих линуксоидов про них читали мельком, но забыли, или вообще никогда не знали. А между прочим кроме: jobs, fg и bg есть disown, wait и даже kill.
Не считая тех, что можно использовать внутри задания или для управления написанными выше командами: enable, builtin.
Итак если вам интересно как делается:
1. Приостановка job-в. Остановка (kill).
2. Запуск ранее приостановленного job-а.
3. Advanced нумерация заданий.
4. Ожидание завершения фоновых задач.
5. Команда disown.

Запустим три задания:
$ nice gzip /dev/null &
[1] 15727
$ bzip2 /dev/null &
[2] 15728
$ xz /dev/null &
[3] 15730

Три задания, с номерами 1, 2, 3. и их PID-ами.

Остановка заданий

Приостановка

Приостанвим задание, например первое:
это сделает команда kill, передавая сигнал SIGSTOP.

В данном случае использовалась внутренняя команда bash-а: kill, а не внешняя программа /bin/kill.
Да, /bin/kill тоже можно использовать для того чтобы передать сигнал SIGSTOP, но внешняя программа не умеет обращаться с номером задания, ей подавай PID.
В линуксе еще достаточно удобно: 4-5 значный PID (2 байта), но в AIX-е pid-ы в основном 8значные PIDы, а могут иметь и 9 цифр, к тому же не последовательны, а разбросаны по своему 4байтному диапазону.

Сигнал SIGSTOP — это один из трех сигналов которые приложение не может игнорировать (SIGSTOP, SIGCONT, SIGKILL который обычно 9). Да, конечно у каждого из них есть и числовой код (например kill -9 означает kill -SIGKILL), но не на всех платформах они совпадают. Узнать их соответствие можно или из документации (man signal/man 7 signal/man kill), или прямо (внутренней)командой kill -l.

Завершение задания

Аналогично:
kill -SIGKILL %1 или PID процесса.

Запуск приостановленного ранее

bg %1 — отправка приостановленного задания выполняться в фон.
fg %1 — переключение в остановленное (или запущенное задание)

Еще вариант: переключиться в это задание и остановить его Ctrl+Z:

Advanced нумерация заданий

Вот у меня продолжают сжимать нули три процесса:

Первое поле в квадратных скобках — номер job-а. К нему можно обратиться такими командами как fg, bg, kill (внутренней), disown, wait.

Второе поле: имеет (минус) для 2го задания и + (плюс) для 3го — это номера заданий в нотации: «Последнее» и «Текущее».
Текущее — это то «с которым мы работаем сейчас». Если у нас запущенно одно задание — то только оно будет иметь +. Если мы переключимся на другое задание командой fg — оно станет «текущим». Команды fg и bg без номера заданий будут работать с Текущим. К нему можно также обратиться через %+ или %%

Последнее — это то, которое было перед «Текущим». Если мы завершим текущее (kill -9 %% ) — то Последнее станет Текущим. Этакий стек заданий. К нему можно обратиться через %-

Также для команд fg, bg, kill, disown, wait к заданиям можно обратиться через имя запускаемой команды:
запустим еще sleep
Убъет только одно задание, который начинается на x (у меня пострадает архивация командой xz)

убьет команду, которая содержит gzip. ( Такой процесс у меня тоже только один), а если маска такая, что в неё входит несколько заданий (например в предыдущей команда kill -9 #?zip, то такое не получится, т.к. и nice gzip и bzip2 попадают под такую маску, и нельзя точно определить к какому заданию относится команда. Хотя странно: для fg то еще можно понять что нужен один аргумент, а kill может принимать несколько аргументов, bg не может но мог бы, но в общем все команды не могут разобраться c неоднозначными масками)

Подробнее смотрите таблицу из ABS Guide

enable и builtin

Тут то и следует рассказать о командах enable и builtin:
Из ссылки выше:

Конструкция builtin BUILTIN_COMMAND запускает внутреннюю команду «BUILTIN_COMMAND», на время запрещая использование функций и внешних системных команд с тем же именем.

enable Либо запрещает, либо разрешает вызов внутренних команд. Например, enable -n kill запрещает использование внутренней команды kill, в результате, когда интерпретатор встретит команду kill, то он вызовет внешнюю команду kill, т.е. /bin/kill.

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

Ожидание завершения фоновых задач

Команда wait — приостанавливает работу сценария до тех пор пока не будут завершены все фоновые задания или пока не будет завершено задание/процесс с указанным номером задания/PID процесса. Возвращает код завершения указанного задания/процесса.
Часто используется для синхронизации процессов: запустить один или несколько задач в фоне (параллельно), дождаться их завершения, и продолжить следующую фазу.

Запустит одновременно закачку по списку всех url, и только когда будет завершатся все закачки — перекинет их на флешку.

Команда disown

disown — Удаляет задание из таблицы активных заданий командной оболочки. Т.е. процесс продолжает работать в фоновом режиме, но уже не является заданием.
Полезно процессам запущенных командой nohup — она перехватывает сигнал SIGHUP, а также забирает потоки вывода к себе в файл nohup.out.

Также есть команды: suspend, times и logout, и times.
Например times %N — выводит накопленное время в userspace и system для job-а и текущей оболочки. Suspend приостаналивает текущую оболочку, как это можно было бы сделать нажав ctrl+Z для другой команды, но при условии что текущая оболочка работает не в режиме login shell. Но даже не представляю как их можно применять.

Источник

Читайте также:  Горячие клавиши полный экран mac os
Оцените статью