Различие между идентификатором группы процесса и идентификатором задания в UNIX

Редактирование: мысль о чем-то еще.

Вы говорите создание формы динамично - делают Вас, действительно означают < form> и его содержание, потому что asp.net не соглашается с несколькими формами на странице и она уже создает одну uberform для Вас.

7
задан Jonathan Leffler 2 October 2009 в 17:41
поделиться

1 ответ

Хорошие вопросы. Идентификатор задания - это в основном конструкция оболочки. В ядре есть поддержка в виде сигналов, которые участвуют в управлении заданиями, и способ, которым ядро ​​точно знает, каким процессам отправлять сигналы управления заданием.

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

Чтобы ответить на ваш последний вопрос, оболочка запускает все процессы, сначала выполняя вилку (2) , а затем выполнение execve (2) . Единственная разница с и заключается в том, что оболочка не выполняет wait (2) (или родственный вариант), и поэтому программа может продолжать работу «в фоновом режиме». На самом деле в Unix мало различий между передним планом и фоном.

Группа процессов - это ассоциация, определяемая оболочками, чтобы ядро ​​знало об одном процессе «переднего плана», который обрабатывает набор различных «фоновых» процессов. Это в основном важно для того, чтобы фоновые процессы генерировали сигнал, если они решат внезапно прочитать данные с терминала. (Такой терминал, вероятно, подключен к стандартному вводу.) Это заставит «задание» сгенерировать сигнал, и оболочка предложит пользователю что-то сделать.

Попробуйте (спящий 5; читать x) & и через 6 секунд введите return или что-то еще, чтобы оболочка проснулась. Вот когда вы видите что-то вроде ...

[1] + Stopped (sleep 5; read x)

... и затем вы набираете fg , чтобы вывести его на передний план.

Первоначально, У Unix были конвейеры, и у него были & , но не было способа переместить команду или конвейер между передним планом и фоном, а также не было способа помочь фоновому процессу, который внезапно решил прочитать стандартный ввод.

Управление заданиями и поддержка ядра для него были добавлены Биллом Джоем и другими в ранние версии BSD и csh (1). Они были последовательно подобраны коммерческим Unix и клонированы для аналогичного рабочего ядра Linux.


Что касается вопросов о группах процессов и ps (1) ... Для поддержки управления заданиями в оболочках состояние процесса ядра включает идентификатор группы процессов и идентификатор сеанса. Группа процессов и задание - это одно и то же, но номер задания - это просто дескриптор, создаваемый оболочкой. Процесс является лидером сеанса, если идентификатор сеанса такой же, как pid, и процесс является лидером группы процессов, если pgid совпадает с pid. Я считаю, что с + , которые печатает ps (1) , происходит нечто более тонкое. Каждый терминал знает свою группу процессов переднего плана, поэтому я считаю, что процесс получает +, если pid == pgid && (pgid - это pg переднего плана для его управляющего терминала).

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

13
ответ дан 6 December 2019 в 19:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: