FastNetMon

понедельник, 18 марта 2013 г.

Что делает /sbin/reboot в Debian 6 Squeeze?

Начнем с того, что /sbin/reboot - это симлинк на /sbin/halt.
А далее код крайне прост, когда halt вызван как reboot включается вот такая переменная:
if (!strcmp(progname, "reboot")) do_reboot = 1;
А чуть ниже вот такой код:
      if (do_reboot) {
                init_reboot(BMAGIC_REBOOT); 
Предифайн у нас означет следующее:

#define BMAGIC_REBOOT           RB_AUTOBOOT


Далее в src/reboot.h:
#define init_reboot(magic)      reboot(magic)
 А reboot - это уже системный вызов Linux (man 2 reboot).

В описании системного вызова на случай RB_AUTOBOOT имеется следующее:

LINUX_REBOOT_CMD_RESTART (RB_AUTOBOOT,  0x1234567).   The message "Restarting system." is printed, and a default restart is performed immediately.  If not preceded by a sync(2), data will be lost.
А вот как работает reboot - дело отдельной статьи.

Данная заметка попытка понять - ограничивается ли reboot посылкой сигнала init процессу или он несколько более сложен.

2 комментария :

  1. Кажется,
    # /sbin/shutdown -r now
    как-то побезопаснее будет.

    ОтветитьУдалить
  2. Ну это по ситуации, по-моему, они уже давно делают тоже самое в той или иной мере.

    ОтветитьУдалить

Примечание. Отправлять комментарии могут только участники этого блога.