В чем разница между работой и процессом?


Ответы:


46

Процесс - это любая работающая программа с собственным адресным пространством.

Задание - это концепция, используемая оболочкой. Любая программа, которую вы запускаете в интерактивном режиме и которая не отсоединяется (т. Е. Не является демоном), является заданием. Если вы используете интерактивную программу, вы можете нажать, CtrlZчтобы приостановить ее. Затем вы можете запустить его обратно на переднем плане (используя fg) или в фоновом режиме (используя bg).

Пока программа приостановлена ​​или работает в фоновом режиме, вы можете запустить другую программу - тогда у вас будет запущено два задания. Вы также можете запустить программу запущенной в фоновом режиме, добавляя «и» как это: program &. Эта программа станет фоновой работой. Чтобы перечислить все рабочие места, которые вы выполняете, вы можете использовать jobs.

Для получения дополнительной информации о заданиях см. Этот раздел справочной страницы bash.


В приведенном выше примере, когда у нас запущено 2 задания, у нас также запущено 2 процесса , не так ли? Не могли бы вы уточнить значение своего собственного адресного пространства ? В каком случае программа не имеет собственного адресного пространства?
Кенни

@ Кенни, да, эти рабочие места тоже будут процессами. На самом деле каждая работа - это процесс. Работа связана с вашей сессией. Каждый процесс, который вы запускаете и который не отрывается от вашего tty, - это работа.
Шон Дж. Гофф

@ Кенни, что касается процессов, когда я говорю «программа», это очень общая вещь - набор упорядоченных инструкций для процессора. Это также называется задачей или потоком выполнения. Процесс может создать другой поток, который разделяет его адресное пространство.
Шон Дж. Гофф

1
Переданные по конвейеру команды, такие как in, ls | sortявляются заданием, но каждая команда выполняется как дочерний процесс другого процесса подоболочки. Это пример работы, состоящей из нескольких процессов. Как ваше определение работы может объяснить, что работа может состоять из нескольких процессов?
Тим

30

UNIX имеет отдельные понятия «процесс», «группа процессов» и «сессия».

Каждая оболочка, которую вы получаете при входе в систему, становится лидером своей собственной новой сессии и группы процессов и устанавливает для себя группу управления процессами терминала.

Оболочка создает группу процессов в текущем сеансе для каждого запускаемого задания и помещает каждый запускаемый процесс в соответствующую группу процессов. Например, ls | headэто конвейер из двух процессов, который оболочка считает одним заданием и будет принадлежать одной новой группе процессов.

Процесс представляет собой (совокупность) поток выполнения и другой контекст, такой как адресное пространство и таблица дескрипторов файлов. Процесс может запустить другие процессы; эти новые процессы будут принадлежать к той же группе процессов, что и родительский процесс, если не будут предприняты другие действия. Каждый процесс также может иметь «управляющий терминал», который запускается так же, как и его родительский процесс.

Оболочка имеет концепцию «передних» заданий и «фоновых» заданий. Задания на переднем плане - это группы процессов с управлением терминалом, а задания на заднем плане - это группы процессов без управления терминалом.

Каждый терминал имеет группу процессов переднего плана. При выводе задания на передний план оболочка устанавливает его как группу процессов переднего плана терминала; при переводе задания в фоновый режим оболочка устанавливает приоритетную группу процессов терминала на другую группу процессов или себя.

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


1
Это хороший, краткий обзор управления процессами оболочки и терминала. Это можно улучшить, упомянув, что «задание» - это «конвейер», в котором может быть несколько процессов, связанных вместе в группе процессов.
Крис Пейдж

1

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

Источник

хорошие примеры


-1

Вышеприведенные определения носят технический характер, но, возможно, оператору потребовалось более подробное разъяснение. Я думаю, что работа - это запланированный процесс. Когда мы имеем дело с процессами в целом, не обязательно понятие расписания, но когда мы используем слово «работа», мы всегда подразумеваем, что оно запланировано или повторяется как цикл, это как рабочий.


1
Пожалуйста, объясните голосование вниз, если вы хотите проголосовать вниз. Если этот ответ неверен, хотя бы объясните, почему вы считаете его неправильным. До сих пор я все еще думаю, что мой ответ имеет смысл, это то объяснение, которое я искал.
eloone

Я согласен, что тот, кто проголосовал против, должен был объяснить, почему. Но я думаю, что причиной отрицательного мнения является то, что ваше определение «работа» просто не правильно.
Prograde

Не хочешь объяснить, почему это не правильно? «Задание» не так четко определено, как «процесс» (с PID в системе). По моему опыту, «работа» всегда была словом, используемым для определения определенного типа процесса, который часто планировался и выполнялся в фоновом режиме, и который можно запустить. Вот почему это трудно определить, потому что использование определяет это. Это также может быть группа процессов, но это также и «контейнер» (LXC), но «контейнер» не является «заданием». Запущенный процесс, такой как «nginx», также не является «работой». Мой комментарий все еще добавляет что-то к ответу. Опять же, это отвечает тому, что я пытался понять.
Eloone

Я также все еще ищу правильное определение, так что извините, я не могу ответить (пока). Но что не правильно, так это то, что это должно быть запланировано.
прогр
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.