Все ли задания в оболочке bash точно образуют сеанс?

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

host='Foo_0';
sed -Ee '

   # Step-1: SELECT RANGE
   /^define hostgroup[{]/,/^[}]/!b

   # Step-2: SAVE RANGE DATA
   H; /^define hostgroup[{]/h; /^[}]/!d

   # Step-3: SHAPE RANGE DATA
   g;/\nhostgroup_name\s+HOSTGROUP ONE/s/\nmembers\s+/&'"${host}"', /

' printer.cfg
0
10.08.2017, 08:22
1 ответ

Не каждый процесс оболочки, только вход в систему оболочка создает новый сеанс (подробнее ниже ). Очевидно, что вначале сеанс имеет только одного члена — саму оболочку. Каждый новый разветвленный процесс автоматически принадлежит одному и тому же сеансу. Процесс может удалить себя из своего сеанса, создав новый с помощью setsid(). У процесса нет другого способа изменить свою сессию.

Резюме:

session members = login shell
    AND all child processes (and their child processes, etc.)
    EXCEPT child processes that have created its own sessions

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


ОБНОВЛЕНИЕ

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

Как указал @StéphaneChazelas, сеанс создается программой, которая управляет входом в систему на терминале или псевдотерминальном устройстве. Сессия строго привязана к своему терминалу.

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

3
28.01.2020, 02:24

Теги

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