<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=326359&amp;view=findpost&amp;p=2836203</guid>
        <pubDate>Tue, 22 Feb 2011 13:33:21 +0000</pubDate>
        <title>Управление процессом загрузки</title>
        <link>https://forum.sources.ru/index.php?showtopic=326359&amp;view=findpost&amp;p=2836203</link>
        <description><![CDATA[SVK: Не вдаваясь в подробности общего механизма загрузки Linux, в данной теме опишу основные пункты, достаточные для достижения конкретных целей.<br>
<br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">теория об init и уровнях выполнения</div><div class="body"><div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>http://lib.ru/unixhelp/init.txt</span><div class='quote '>Ядро инициализирует себя и после этого  запускает процесс init. А init - все остальные процессы,  программы, которые необходимы для нормального функционирования операционной системы. Все дальнейшие  действия в системе определяются этим процессом. Все, что нужно делать init-у, определяет специальная таблица.</div></div><div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>http://www.linuxcenter.ru/lib/books/kostromin/gl_08_02.phtml</span><div class='quote '>Список этих операций зависит от так называемого уровня выполнения (run level). Уровень выполнения определяет перечень действий, выполняемых процессом init, и состояние системы после загрузки, т. е. конфигурацию запущенных процессов. Уровень выполнения идентифицируется одним символом. В ОС Linux существует несколько основных уровней выполнения:<br>
<strong class='tag-b'>0</strong> — остановка системы;<br>
<strong class='tag-b'>1</strong> — однопользовательский режим (для специальных случаев администрирования);<br>
<strong class='tag-b'>2</strong> — многопользовательский режим без NFS (то же, что и 3, если компьютер не работает с сетью);<br>
<strong class='tag-b'>3</strong> — полный многопользовательский режим;<br>
<strong class='tag-b'>4</strong> — использование не регламентировано;<br>
<strong class='tag-b'>5</strong> — обычно используется для запуска системы в графическом режиме;<br>
<strong class='tag-b'>6</strong> — перезагрузка системы; </div></div><div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>http://citforum.ru/operating_systems/manpages/INITTAB.4.shtml</span><div class='quote '>Ключевым, так-же является, поле действие определяет дисциплину обработки процесса, указанного в строке.<br>
<strong class='tag-b'>respawn</strong> Если процесс не существует, то запустить его, не ждать завершения (продолжать просмотр файла inittab), после завершения процесса перезапустить его. Если процесс уже существует, ничего не делать и продолжать просмотр файла inittab. <br>
<strong class='tag-b'>wait</strong> При переходе на уровень_выполнения, совпадающий с указанным в строке, запустить процесс и ожидать его завершения. При всех последующих просмотрах файла inittab на том же уровне выполнения игнорировать строку. <br>
<strong class='tag-b'>once</strong> При переходе на уровень_выполнения, совпадающий с указанным в строке, запустить процесс и не ожидать его завершения. Когда процесс завершится, не перезапускать его. Если уровень будет изменен в момент, когда программа еще выполняется из-за предыдущей смены уровня выполнения, то она не перезапускается. <br>
<strong class='tag-b'>boot</strong> Эта строка будет обработана только один раз во время чтения init&#39;ом файла inittab при начальной загрузке системы. Программа init запускает процесс и не ожидает его завершения. Когда процесс завершится, он не перезапускается. Чтобы это действие выполнялось, поле уровень_выполнения должно быть пустым или соответствовать уровню выполнения процесса init во время загрузки системы. Спецификацией boot помечают функции инициализации, следующие за аппаратной загрузкой системы. <br>
<strong class='tag-b'>bootwait</strong> Эта строка будет обработана один раз при переходе init из однопользовательского режима в многопользовательский после загрузки системы. (Если действие initdefault соответствует уровню выполнения 2, то указанный в строке процесс будет запущен сразу после загрузки системы). Программа init запускает процесс, дожидается его завершения и после этого не перезапускает процесс. <br>
<strong class='tag-b'>powerfail</strong> Выполнять указанный в строке процесс только при получении init&#39;ом сигнала об ошибке питания SIGPWR. <br>
<strong class='tag-b'>powerwait</strong> Выполнять указанный в строке процесс только при получении init&#39;ом сигнала об ошибке питания SIGPWR и продолжать обработку файла inittab лишь после завершения процесса. <br>
<strong class='tag-b'>off</strong> Если процесс, ассоциированный с данной строкой, выполняется, ему посылается предупреждающий сигнал SIGTERM и дается 20 секунд на завершение, после чего он принудительно терминируется сигналом SIGKILL. Если процесс не существует, строка игнорируется. <br>
<strong class='tag-b'>ondemand</strong> Это действие является синонимом respawn, но используется только со значениями a, b и c в поле уровень_выполнения. <br>
<strong class='tag-b'>initdefault</strong> Строка, в которой указано это действие, используется только при первом обращении к процессу init. Она определяет уровень выполнения, устанавливаемый первоначально: выбирается максимальная из цифр, указанных в поле уровень_выполнения. Если поле уровня пусто, оно рассматривается как содержащее 0123456 и, следовательно, устанавливается уровень выполнения 6. Если в файле /etc/inittab нет строки с действием initdefault, то начальное значение уровня выполнения запрашивается у пользователя в момент загрузки системы. <br>
<strong class='tag-b'>sysinit</strong> Строки этого типа выполняются перед тем, как init попытается получить доступ к консоли (то есть перед выводом приглашения Console login:). Обычно подобные строки используются только для инициализации устройств, с которых init может попытаться запросить уровень выполнения. Команды из этих строк выполняются с ожиданием завершения.</div></div></div></div><br>
Пример инициализационной таблицы запускаемых процессов (файл /etc/inittab)<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line"># /etc/inittab: init(8) configuration.</div><div class="code_line"># $Id: inittab,v 1.91 2002/01/25 13:35:21 miquels Exp $</div><div class="code_line">&nbsp;</div><div class="code_line"># The default runlevel.</div><div class="code_line">id:5:initdefault:</div><div class="code_line">&nbsp;</div><div class="code_line"># Boot-time system configuration/initialization script.</div><div class="code_line"># This is run first except when booting in emergency (-b) mode.</div><div class="code_line">si::sysinit:/etc/init.d/rcS</div><div class="code_line">&nbsp;</div><div class="code_line"># What to do in single-user mode.</div><div class="code_line">~~:S:wait:/sbin/sulogin</div><div class="code_line">&nbsp;</div><div class="code_line"># /etc/init.d executes the S and K scripts upon change</div><div class="code_line"># of runlevel.</div><div class="code_line">#</div><div class="code_line"># Runlevel 0 is halt.</div><div class="code_line"># Runlevel 1 is single-user.</div><div class="code_line"># Runlevels 2-5 are multi-user.</div><div class="code_line"># Runlevel 6 is reboot.</div><div class="code_line">&nbsp;</div><div class="code_line">l0:0:wait:/etc/init.d/rc 0</div><div class="code_line">l1:1:wait:/etc/init.d/rc 1</div><div class="code_line">l2:2:wait:/etc/init.d/rc 2</div><div class="code_line">l3:3:wait:/etc/init.d/rc 3</div><div class="code_line">l4:4:wait:/etc/init.d/rc 4</div><div class="code_line">l5:5:wait:/etc/init.d/rc 5</div><div class="code_line">l6:6:wait:/etc/init.d/rc 6</div><div class="code_line">&nbsp;</div><div class="code_line">my:2345:once:/media/mmcblk0/w/QtTest -qws</div><div class="code_line">&nbsp;</div><div class="code_line"># Normally not reached, but fallthrough in case of emergency.</div><div class="code_line">z6:6:respawn:/sbin/sulogin</div><div class="code_line">S:2345:respawn:/sbin/getty 115200 ttyS0 vt100</div><div class="code_line"># /sbin/getty invocations for the runlevels.</div><div class="code_line">#</div><div class="code_line"># The &quot;id&quot; field MUST be the same as the last</div><div class="code_line"># characters of the device (after &quot;tty&quot;).</div><div class="code_line">#</div><div class="code_line"># Format:</div><div class="code_line"># &nbsp;&#60;id&#62;:&#60;runlevels&#62;:&#60;action&#62;:&#60;process&#62;</div><div class="code_line">#</div><div class="code_line">&nbsp;</div><div class="code_line">1:2345:respawn:/sbin/getty 38400 tty1</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>где строка &quot;my:2345:once:/media/mmcblk0/w/QtTest -qws&quot; как раз отвечает за единократный &quot;once&quot; запуск нашей программы &quot;QtTest&quot; с параметром &quot;-qws&quot; с флешкарты &quot;/media/mmcblk0&quot; из директории &quot;w&quot; из под любого пользовательского уровня &quot;2345&quot;.<br>
<br>
В вышеприведённой инициализационной таблице мы можем видеть, что существует дополнительная возможность конфигурирования процесса: через создание скриптов запуска в директориях /etc/rcX.d, обработку которых осуществляет скрипт &quot;/etc/init.d/rc&quot;. Так-же, следует заметить, что файлы из этих директорий могут являться ссылками, которые на самом деле располагаются в директории &quot;/etc/init.d&quot;.<br>
<br>
Пример содержимого директории &quot;/etc/rc3.d&quot;:<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>S10dropbear S20ntpd S23bluetooth S50bonjour S90i2c S20boa S20syslog S25alsa-state S65cron S99rmnologin</div></div><br>
Например,<br>
именно через этот механизм происходит запуск <a class='tag-url' href='http://forum.sources.ru/index.php?showtopic=317845' target='_blank'>OPIE</a>: прописывается скрипт &quot;/etc/rc5.d/S98opie&quot;.<br>
Или-же,<br>
если мы в ближайшее время не собираемся использовать bluetooth и/или работать со звуком, то можно удалить скрипты S23bluetooth и S25alsa-state соответственно, что значительно ускорит процесс загрузки; проще и надёжнее вписать в первую строчку &quot;exit 0&quot;.]]></description>
        <author>SVK</author>
        <category>Gumstix</category>
      </item>
	
      </channel>
      </rss>
	