Как я могу вызвать reboot () из пространства имен PID, отличного от начального пространства имен PID, и из начального пространства имен PID? - PullRequest
0 голосов
/ 19 декабря 2018

Страница для reboot () говорит

Поведение в пространствах имен PID

Начиная с Linux 3.4, если reboot ()вызывается из пространства имен PID, отличного
от исходного пространства имен PID
, с одним из значений cmd, перечисленных ниже
, он выполняет "перезагрузку" этого пространства имен: процесс "init"
пространства имен PID немедленно прекращается, с эффектами
, описанными в pid_namespaces (7).

Значения, которые могут быть предоставлены в cmd при вызове reboot () в этом случае, следующие:

LINUX_REBOOT_CMD_RESTART, LINUX_REBOOT_CMD_RESTART2 Процесс «init» завершается, и wait (2) в родительском процессе сообщает, что ребенок был убит с сигналом SIGHUP.

LINUX_REBOOT_CMD_POWER_OFFT_TIN_TECT_TINED_INT_TEC_TED_TINT_TIC_TINTLEDUX_UXBи wait (2) в родительском процессе сообщает, что дочерний элемент был убит сигналом SIGINT.

Для других значений cmd reboot () возвращает -1, а errno равноустановить
EINVAL.

Я немного ограничился в понимании пространства имен PID после прочтения его страницы man .Мне было интересно, как вызвать reboot ()

  • из пространства имен PID, отличного от исходного пространства имен PID, и
  • из исходного пространства имен PID?

1 Ответ

0 голосов
/ 16 февраля 2019

Вы можете использовать nsenter, чтобы получить другие PID.Чтобы выполнить перезагрузку из PID, отличного от исходного пространства имен PID:

/usr/bin/nsenter -m/proc/PID/ns/mnt reboot

Если целевой PID равен 1:

/usr/bin/nsenter -m/proc/1/ns/mnt reboot

Второй вопрос будет таким же, как простой вызов reboot, поскольку это получило бы текущий контекст PID.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...