Можно ли объединить два разных пространства имен процессов?

Тот факт, что ваш файл предварительно отсортирован, делает его управляемым с помощью sed , где в любой момент времени пространство шаблонов sed содержит не более 2 строки .

sed -e '
   $!{
      N
      /^\([^,]*\),[[:space:]]\{1,\}\([^[:space:]]\{1,\}\)[[:space:]].*[[:space:]]\([^[:space:]]\{1,\}\)\n\1,[[:space:]]\{1,\}\2[[:space:]]/D
   }
   s/^\([^,]*\),[[:space:]]\{1,\}\([^[:space:]]\{1,\}\)[[:space:]].*[[:space:]]\([^[:space:]]\{1,\}\)\(\n\)/\1 \3\4/
   /\n/!s/^\([^,]*\),[[:space:]]\{1,\}\([^[:space:]]\{1,\}\)[[:space:]].*[[:space:]]\([^[:space:]]\{1,\}\)/\1 \3/
   P;D
' yourfile

Краткое описание

We always keep 2 lines in the pattern space and note the time when there
is a change in the 1st field. So long as we keep encountering the same
first two fields, we keep chopping off the previous line and reading in
the next. And on a transition we print the 1st and last fields of the 
previous line, print it, remove upto the newline, and go back for more
with whats left in the pattern space.
1
17.01.2019, 19:37
2 ответа

Когда мы говорим о пространствах имен Linux, мы на самом деле говорим о ряде различных пространств имен, каждое из которых может быть установлено отдельно:

  1. Идентификаторы процессов
  2. Общая память
  3. Сеть
  4. Имя хоста и т. Д.
  5. ИД пользователей
  6. Файловая система

Когда процесс вызывает setns () или clone () с правильными флагами, тогда создается новое пространство имен породил "фальшивый" взгляд на мир.

Теперь это может вызвать проблемы, если мы захотим снова объединить их вместе.

Давайте возьмем пространство имен «ID процесса», потому что оно простое.

Когда вы создаете новое пространство имен PID, первый процесс получает PID 1 внутри этого пространства имен. Если у вас есть два новых пространства имен, значит, у вас есть два процесса, которые думают, что они PID 1. Если вы хотите объединить их, у вас есть конфликт; только один из них может сохранить PID 1, вам придется изменить PID запущенного процесса неожиданно. Это могло иметь неожиданные последствия.

Аналогично IPC; два отдельных блока разделяемой памяти могут иметь одинаковый адрес внутри соответствующих пространств имен; если мы попытаемся объединить их, мы увидим повреждение памяти (даже если вы изменили адрес одного сегмента, процессы все равно будут иметь старый адрес).

Таким образом, объединение двух существующих пространств имен чревато опасностями.

Что делают патчи докера , так это предотвращают создание нового пространства имен при запуске контейнера. Это отличается от слияния двух существующих контейнеров; это происходит во время запуска контейнера.

1
27.01.2020, 23:47

Насколько далеко насколько я знаю, нет возможности присоединиться к разным пространствам имен процессов. setns в пространстве имен PID позволяет процессу порождать дочерние элементы только в другом пространстве имен, и это другое пространство имен должно быть потомком пространства имен процесса, поэтому я не думаю, что это может вам помочь.

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

Цитаты, которые вы цитируете о Docker, не обсуждают слияние пространств имен: они касаются не создания дочернего пространства имен (поэтому оно остается одним большим пространством имен).

0
27.01.2020, 23:47

Теги

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