Intereting Posts
Как сгруппировать письма по отправителю и отсортировать их по времени, полученному отправителем в Mutt arch linux-error: не удалось получить канонический путь «airootfs» (grub to USB installation) Какая часть ядра Linux определяет порядок выполнения пользовательских приложений? Можно ли скопировать relpath в одну команду? Как защитить выражения в команде «find» от интерпретации оболочки? Экспортировать содержимое демон экрана в файл Исправление ядра для загрузки без initrd scp to / home изменяет разрешения? Как настроить зашифрованный каталог для монтирования только во время доступа samba? Как переместить фоновое задание с одной вкладки терминала на другую? Локальная доставка по электронной почте Fedora Как найти libavcodec для сборки VLC (с AFL fuzz)? Команда, чтобы скрыть все, кроме окна просмотра в окне терминала? Почему некоторые операции обработки событий в операционной системе записываются в asm вместо c? Возобновление во время спящего режима после восстановления изображения

Запуск процесса после загрузки

Я знаю, что следующие способы запускаются в Linux

  • от init.d (или аналогичного)
  • из оболочки (пользователем)
  • раздвоенный запущенным родным демоном

Можно ли в Linux запускать процесс, и он не попадает в вышеуказанные категории? Например, можно ли запустить процесс без знания пользователя?

В Linux почти все процессы (в том числе серверы и программы-демоны) запускаются с помощью fork (2) (иногда реализуется в стандартной библиотеке C с использованием клона (2) ), за которым следует execs (2) syscall. Библиотечная функция daemon (3) использует эти (и некоторые другие) системные вызовы (перечисленные в syscalls (2) ….)

Единственными исключениями являются несколько процессов, магически начатых ядром . К ним относятся:

  • init (обычно /sbin/init , который может быть системным в наши дни, но вы можете загрузить свое ядро ​​и передать init=/bin/bash ему через GRUB), который запускается при инициализации ядра.

  • некоторые очень немногие программы начали волшебство с помощью ядра (когда происходит какое-то внешнее событие), например, иногда modprobe , hotplug и т. д ….

init существовал в 1980-х годах Unixes (например, SunOS3). AFAIK, автоматически запускаемые hotplug подобные процессы – это недавнее дополнение Linux (возможно, Linux 3 или, по крайней мере, 2.6, см. Также udev )

Большинство программ и процессов (включая login , bash , getty , cron , atd , mysqld ) являются потомками init с fork & execve Вы в принципе можете игнорировать исключения (например, hotplug ), и у вас может быть система Linux, в которой каждый процесс является потомком init (это было в случае с ядрами Linux 1.x в предыдущем столетии). Используйте pstree (1), чтобы увидеть дерево процессов.

Прочитайте wikipage о процессе запуска Linux и от PowerUp до Bash Prompt (который может быть немного устаревшим, но большая часть его по-прежнему верна).

setuid – это умный механизм, связанный с привилегиями (см. также setreuid (2) , учетные данные (7) , возможности (7) , пространства имен (7) ).

Сначала я рекомендую сначала прочитать Advanced Linux Programming . После этой книги появилось несколько функций или системных вызовов (например, signalfd (2) , inotify (7) , epoll (7) ….).