Передающие аргументы оболочке su-provided

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

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

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

Относительно фрагментации реальной памяти я не думаю, что это возможно в более прекрасном, чем размер страницы (4 КБ) гранулярность. Таким образом, при чтении 1 МБ фактически непрерывного пространства, которое является на самом деле 100%, фрагментированными в 1 024 страницы, может быть 1 000 дополнительных незначительных включенных операций. В том бите практического руководства мы читаем:

Основное ядро содержит в его дорогом непрерывном домене большое пространство допускающей повторное использование памяти - пул kmalloc. В некоторых версиях Linux загрузчик модуля пытается сначала получить непрерывную память от того пула, в который можно загрузить LKM и только если достаточно большое место не было свободным, перейдите к пространству vmalloc. Andi Kleen отправила код, чтобы сделать это в Linux 2.5 в октябре 2002. Он утверждает, что различие находится в диапазоне на несколько процентов.

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

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

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

8
07.04.2014, 01:27
2 ответа
[1122140] Происходит то, что первым аргументом, который вы предоставляете оболочке, является параметр [1122628]$0 [1122629], (обычно это имя оболочки). Он не включается, когда вы делаете [1122630]echo $*[1122631], так как [1122632]$*[1122633] - это каждый аргумент, кроме [1122634]$0[1122635]. Пример:

Обновление

Выполнение следующей команды:

дает строчную линию:

Таким образом каким-то образом кажется, что в данном случае [1122636]su[1122637] прогрызает лишний [1122638]--[1122639], не передавая его на баш, возможно, из-за ошибки (или, по крайней мере, из-за недокументированного поведения). Однако это не съест больше двух аргументов [1122640]--[1122641]:

9
27.01.2020, 20:10
[1122194]На самом деле ответ Грэма - и ваш вопрос - это просто ссылка на побочные эффекты того, как оболочка обрабатывает [1122690] "$@позиционные $*параметры". [1122691] Они назначаются оболочкой своим аргументам при вызове и в любое время позже с помощью встроенной утилиты [1122692] set[1122693]. Они могут быть вызваны в любое время либо с помощью [1122694] "$*"[1122695], который расщепляет каждую позицию первым символом в [1122696] "$IFS"[1122697] или [1122698] "$@"[1122699], который цитирует каждую позицию и расщепляет их со всеми [1122700] "$IFS"

pip install greenlet

. Если у вас уже есть значения, которые вы подаете оболочке, вам не нужно [1122702]--[1122703] три раза. Параметры оболочки имеют [1122704] значение [1122705] - всегда, в любое время, а не только при вызове [1122706] (за исключением $0 и -i):

git clone https://github.com/gevent/gevent.git

И все это цитирование оболочки может ввести в заблуждение. Это немного упрощает ситуацию:

python setup.py build

Аргументы родительской оболочки составляют [1122708]set[1122709] to 4, 5, и 6 и затем передаются в подоболочку, вызываемую [1122710]su[1122711] через позиционный параметр [1122712] "$@array".

python setup.py install
Обратите внимание, как я [1122714]( subhell )[1122715] выполнил вышеприведенную команду - я делаю это, потому что не хочу вмешиваться в мое текущее окружение оболочки - потому что я могу случайно изменить что-то, чего бы я не хотел, если бы сделал это с помощью [1122716]set.

ОТВЕТ:

Прежде всего, ваша Unix-система работает с файлами - разрешениями на доступ к файлам, содержимым файлов, атрибутами файлов. Так или иначе, каждый используемый вами объект данных может [1122718](и, по крайней мере, на мой взгляд, должен)[1122719] быть адресован как файл. Переадресация указывает на файл - вот и все. A [1122720]<

В приведенных ниже комментариях запрашивающая сторона отмечает, что при попытке использовать этот метод в качестве пользователя [1122722]root[1122723] ему выдается ошибка разрешения. Когда я ответил, я предложил ему [1122724]chown[1122725] или [1122726]chgrp[1122727] специальный файл [1122728]/dev/fd/${num}[1122729], но это, вероятно, не самый лучший метод. Причина, по которой он сталкивается с этой проблемой, заключается в том, что [1122730] root[1122731] получает [1122732] разрешения на чтение [1122733], но

telnet your.mail.server.com 143

. login username password

. list "" "*"

. select INBOX

. fetch 1:* flags

не

. fetch 1 rfc822.text

выполняет [1122737] разрешения. Вы можете легко справиться с этим, просто избегая вызова [1122738]exec[1122739]. Вместо вызова файла [1122740]/dev/fd/${num}[1122741] непосредственно в командной строке выполните:

Использование двух heredocs может помочь с экранированием. Вот что происходит в каждом случае:

НЕ УСТАНОВЛЕНО В [1122742]<

OUTPUT

SET [1122744] "$@"[1122745]В [1122746]<OUTPUT

SET [1122748] "$@"[1122749]И БОЛЕЕ В [1122750]<

OUTPUT

5
27.01.2020, 20:10

Теги

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