как вилка ()может возвращать несколько значений?

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

Эта команда сделает это:

sed -E 's/^(AUXDATA.*) ([^ ]*)$/\1 "\2"/' < foo

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

Само регулярное выражение разбивает строку на две части:

  • Часть, которая имеет AUXDATAв начале строки (^, указывает на начало строки ), за которой следует произвольный текст, заканчивающийся пробелом

  • часть строки, которая не содержит пробелов и заканчивается в конце строки

В частности, в этом случае первая часть соответствует AUXDATA Zone_1_X =, а вторая часть соответствует 28.180958. sedзатем заменяет эту строку на:

  • первая часть, \1пробел после
  • двойная -кавычка, затем вторая часть \2и еще одна двойная -кавычка.

Все остальные строки входного файла передаются без изменений с помощью sed.

0
19.11.2021, 05:51
1 ответ

Ни для родителя, ни для потомка не требуется помещать любой pid в память другого.

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

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

Для ядра абсолютно не проблема исправить два кадра стека с разными значениями для родителя и дочернего элемента. Ни один из процессов не выполняется, они оба находятся в системном вызове, поэтому кадр стека хорошо -определен, и ядро ​​может получить доступ ко всей памяти.

-1
19.11.2021, 09:28

Теги

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