Всплеск в PID =1

Хотя я бы использовал здесь rsync, это попытка прямого ответа на вопрос.

С OpenSSH 7.4p1 на Debian GNU/Linux amd64, по крайней мере, и при удаленном копировании (то есть, когда источник или место назначения находится на удаленном хосте), похоже, что scp -r обрабатывает файлы в порядке их чтения из каталогов.

Такой же порядок вы получите, например, с помощью:

printf '%s\n' **/*(D.oN)

в zsh. Глобофикатор oN отключает сортировку. См. также tree -U:

$ tree -U 1
1
├── 2
│   ├── 4
│   │   └── 2-4
│   ├── 2
│   │   └── 2-2
│   ├── 3
│   │   └── 2-3
│   └── 1
│       └── 2-1
├── 3
│   ├── 4
│   │   └── 3-4
│   ├── 2
│   │   └── 3-2
│   ├── 3
│   │   └── 3-3
│   └── 1
│       └── 3-1
└── 1
    ├── 4
    │   └── 1-4
    ├── 2
    │   └── 1-2
    ├── 3
    │   └── 1-3
    └── 1
        └── 1-1
$ print -rl 1/**/*(D.oN)
1/2/4/2-4
1/2/2/2-2
1/2/3/2-3
1/2/1/2-1
1/3/4/3-4
1/3/2/3-2
1/3/3/3-3
1/3/1/3-1
1/1/4/1-4
1/1/2/1-2
1/1/3/1-3
1/1/1/1-1
$ scp -r localhost:1 2
2-4      100%    5    11.6KB/s   00:00
2-2      100%    5    38.9KB/s   00:00
2-3      100%    5    19.6KB/s   00:00
2-1      100%    5    19.6KB/s   00:00
3-4      100%    5    32.1KB/s   00:00
3-2      100%    5    38.8KB/s   00:00
3-3      100%    5    37.5KB/s   00:00
3-1      100%    5    28.4KB/s   00:00
1-4      100%    5    23.8KB/s   00:00
1-2      100%    5    39.1KB/s   00:00
1-3      100%    5    42.8KB/s   00:00
1-1      100%    5    40.9KB/s   00:00
1
16.05.2019, 14:10
2 ответа

What does splash represent here? I know init is the first process that runs when we start up the computer. But what is splash ? What does it do ?

Прежде всего, вы используете Ubuntu, которая использует systemd, что позволяет отображать заставку во время загрузки, поэтому у нее есть аргумент заставки. См. исходный код splash.c .

[РЕДАКТИРОВАТЬ] На вашем компьютере работает systemd, потому что, на самом деле, systemd — единственная известная мне система инициализации, которая поддерживает параметр заставки -могут быть и другие, но, поскольку он также используется по умолчанию в Ubuntu, я думаю, что это безопасное предположение. В Ubuntu по умолчанию /sbin/initявляется символической ссылкой на /usr/lib/systemd/systemd, загруженное ядро ​​/sbin/init splash, здесь psиспользуется командная строка процесса, которая будет /sbin/init splash, и это то, что вы видите.

Also can anybody tell me init is called the first process to be run but it is the BIOS or UFEI program that first run when we start up the computer. So why we called init as the first process not BIOS or UFEI?

Хорошо, для простоты скажу, что BIOS/UEFI — это программы, которые загружаются при загрузке. Они содержат данные конфигурации для дальнейшей загрузки системы. В конечном итоге они найдут следующую программу для загрузки, такую ​​как диспетчер загрузки (, т.е. grub ), который, в свою очередь, позволит вам запустить ядро. Я пытаюсь сделать это простым, здесь, но вы можете прочитать это. в системах Linux и Unix init является первой программой, порожденной ядром, и поэтому получает PID 1.

Вы можете прочитать больше здесь , на самом деле, эта статья довольно старая. Я не утверждаю, что нижеследующее является на 100% точным.

Первое, что нужно сделать для начальной загрузки компьютера с архитектурой x86, — нажать кнопку питания. Ваш блок питания включает материнскую плату и ожидает сигнала от импульсного источника питания SMPS ()о том, что может быть обеспечена достаточная мощность. Например, он проверяет, что ваша видеокарта PCIe получает достаточно сока, есть ли процессор и оперативная память.

С этого момента запускается Intel Management Engine(IME )/ AMD Secure Technology , IME представляет собой отдельный процессор Intel с запутанной операционной системой minix 3,аналог AMD использует ядро ​​ARM, встроенное в центральный процессор; об этих двоих известно немногое.

Как только материнская плата получает SMPS, она прекращает постоянно сбрасывать ЦП, теперь ЦП считывает адрес в ПЗУ, обычно это FFFF:0000h; он содержит переход (как ярлык )к коду прошивки.

Раньше эта прошивка представляла собой один монолитный блок кода, который назывался BIOS и мог использоваться только с клавиатурой. С UEFI это теперь стало целой ОС с мини-файловой системой. Сегодня переход указывает на некоторый код начальной загрузки (, который, вероятно, можно было бы назвать BIOS ), который распаковывает UEFI. UEFI любит мини-операционную систему и может включать поддержку мыши, загрузку по сети, SCSI, RAID, проверку диска и/или памяти и многие другие функции.

После загрузки UEFI выполняет самотестирование при включении питания (POST ), которое проверяет, все ли оборудование в порядке.

Полный POST проверяет многие устройства, такие как CMOS, видеоПЗУ, контроллеры, DMA (, что позволяет устройствам получать прямой доступ к ОЗУ ), ЦП, памяти и другим устройствам. Когда вы перезагружаете ПК, то есть нажимаете кнопку сброса или выполняете команду перезагрузки, выполняется простой POST, который не заметит, если есть проблема с CMOS, например. CMOS это маленькая микросхема на вашей материнской плате энергозависимой памяти (отключает питание и память теряется )и часы, она питается от маленькой батарейки и содержит все настройки для UEFI.

UEFI считывает эти настройки, вносит необходимые изменения в систему и продолжает дальнейшую загрузку системы. UEFI может либо выполнять устаревшую загрузку, ища загрузочную запись на диске, либо использовать более современный метод загрузки UEFI. Для этого требуется раздел в формате FAT32 с загрузочным кодом UEFI, который может загружать ядро ​​​​Linux , менеджер загрузки(Windows )или загрузчик, такой как grub.

Ядро в системах UNIX загружает все необходимые драйверы устройств, а затем запускает процесс инициализации. Init может быть systemdили любой другой программой, такой как bash; вы настраиваете его в параметрах ядра. Обратите внимание, что если вы решите загрузить ядро ​​напрямую с помощью UEFI, установить параметры ядра будет намного сложнее. После загрузки init получает PID 1, а затем загружает пользовательскую среду (, системную оболочку и, опционально, графический пользовательский интерфейс ).

3
27.01.2020, 23:41

What does splash represent here?

Это имя загруженного образа/файла ядра. Или просто первый аргумент командной строки ядра, как вы получаете с

cat /proc/cmdline

Что обычно дает мне три аргумента:

[имя ядра] [initrd=...] [root=...]

Имя ядра по умолчанию — vmlinuz. Я предполагаю, что splash должно быть именем Ubuntu для их ядра со встроенным экраном-заставкой.

Это (, показывающее «всплеск» ), является функцией systemd, с sysvinit это было просто «/sbin/init». Это красиво, но немного читерски, потому что init вызывается не с образом ядра, а ПО ядру, с остальными параметрами загрузки.

И /sbin/init (под systemd как pid #1 )ссылка на двоичный файл systemd /lib/systemd/systemd.

So why we call init as the first process not BIOS or UFEI?

[UEFI! UE -Прошивка -Интерфейс]

«Init» — это просто первый процесс Linux . Запуск /sbin/init — это последнее, что делает ядро.

Помните, что Linux начинался с идеи использования защищенного режима 386 -процессоров. Без этого режима у вас нет реальных процессов.

В некотором смысле ядро ​​Linux само по себе просто устанавливает эффективную систему генерации процессов.Что вы из этого сделаете, зависит от вас :вы можете просто загрузиться с помощью init=/bin/bash в систему всего с одним или двумя МБ. Затем вы все еще можете запускать задания bash в фоновом режиме или запускать двоичный файл, который разветвляется по своему усмотрению. Или запустите еще один bash «поверх» первого. Но один «выход» слишком много в вашей оболочке, и вы возвращаетесь к ядру, которое сразу же паникует.

...или вы можете использовать sysvinit в качестве первого процесса. Эта классическая инициализация запускает процесс входа в систему -для каждого определяемого вами tty. И здесь вы получаете клавишу Alt -для переключения с одного процесса на другой. Затем с tty вы можете запускать другие процессы, а /etc/inittab можно настроить для непосредственного запуска графической «оболочки».

...или вы можете использовать (с 2012 года )systemd как "init" с дополнительными функциями. Большая часть этого делается другими исполняемыми файлами systemd.

Итак, init по определению является первым исполняемым ядром исполняемым файлом :ядро ​​запускает один init, а затем этот init запускает один или несколько процессов (логины, демоны ).

Ранняя активность ЦП, даже приводящая к Visual UEFI -BIOS и UEFI -Shell (НЕ одновременно, конечно ), не называется процессом, даже если процессор выполняет обработку код:-)

@Стивен:

Существуют параметры загрузки initrd=, rdinit= и init=. initrd= называет файл/образ виртуального диска, с помощью rdinit= вы можете изменить /init (, какой файл виртуальный диск должен выполнять первым ), а с помощью init= вы можете изменить /sbin/init.

Я думаю, что вы довольно путаете это в своей ссылке. Возможно потому, что /init в initrd -fs контролируется rdinit=, а init в sbin — init=

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

Так и с:

fedora\vmlinuz root=/dev/sda2

Я могу успешно загрузить ядро ​​Fedora 29 -без initrd.

Все остальные ядра, которые я пробовал, нуждаются в initrd, потому что в них отсутствуют модули sata/scsi.

arch5\vmlinuz-linux initrd=arch5\initramfs-linux.img root=/dev/sda3 init=/usr/bin/sysvinit

Вот как я запускаю именно ту систему, в которой сейчас нахожусь, но со старым sysvinit вместо /sbin/init (, который является ссылкой на /lib/systemd/systemd ). Здесь это /init archlinux, который использует root= для переключения _root на /dev/sda3 и init= для запуска чего-то другого, кроме /sbin/init.

Я также загружался, манипулируя /init, переархивируя его и входя.

arch\vmlinuz.4.20.6 initrd=arch\archsam.cpio

Здесь нет root=, потому что я жестко -закодировал корневой раздел в /init.

ПС:

[    0.000000] Linux version 5.1.12-arch1-1-ARCH (builduser@heftig-24809) (gcc version 9.1.0 (GCC)) #1 SMP PREEMPT Wed Jun 19 09:16:00 UTC 2019
[    0.000000] Command line: arch5\vmlinuz-linux initrd=arch5\initramfs-linux.img root=/dev/sda3

Это мои первые две строки сообщения ядра. Опять же, обратите внимание на обратную косую черту в arch5\vmlinuz -линукс!

И ps axf дает мне это (без потоков ядра 2 примерно до 200):

    1 ?        Ss     0:01 /sbin/init arch5\vmlinuz-linux
  291 ?        Ss     0:00 /usr/lib/systemd/systemd-journald
  304 ?        Ss     0:00 /usr/bin/lvmetad -f
  315 ?        Ss     0:00 /usr/lib/systemd/systemd-udevd
  321 ?        Ss     0:00 /usr/lib/systemd/systemd-networkd
  453 ?        Ssl    0:00 /usr/lib/systemd/systemd-timesyncd
  456 ?        Ss     0:05 /usr/lib/systemd/systemd-resolved
  466 ?        Ss     0:02 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
  467 ?        Ss     0:00 /usr/lib/systemd/systemd-logind
  469 ?        Ss     0:00 login -- root
  484 tty1     Ss     0:00  \_ -bash
  922 tty1     S+     0:00      \_ xinit fvwm
  923 tty2     S<sl+   8:08          \_ /usr/lib/Xorg :0
  930 tty1     S      0:00          \_ xterm -geometry +1+1 -n login fvwm
  932 pts/0    Ss+    0:08              \_ fvwm
  937 pts/0    S+     0:00                  \_ /usr/lib/fvwm/2.6.8/FvwmButtons 9 4 none 0 8 RightPanel
  938 pts/0    S+     0:00                  \_ /usr/lib/fvwm/2.6.8/FvwmEvent 11 4 none 0 8 EventNewDesk
  939 pts/0    S+     0:00                  \_ /usr/lib/fvwm/2.6.8/FvwmPager 13 4 none 0 8 *
  940 pts/0    S+     0:01                  \_ /usr/lib/fvwm/2.6.8/FvwmIconMan 15 4 none 0 8
  941 pts/0    S+     0:04                  \_ /usr/lib/fvwm/2.6.8/FvwmScript 17 4 none 0 8 FvwmScript-DateTime
  955 pts/0    Sl    22:28                  \_ /usr/lib/firefox/firefox
 1049 pts/0    Sl    18:08                  |   \_ /usr/lib/firefox/firefox -contentproc -childID 1 -isForBrowser -prefsLen 1 -prefMapSize 179366 -parentBuildID 20190620195126 -greomni /usr/lib/firefox/omni.ja -appomni /usr/lib/firefox/browser/omni.ja -appdir /usr/lib/firefox/browser 955 true tab
 1129 pts/0    Sl     0:46                  |   \_ /usr/lib/firefox/firefox -contentproc -childID 2 -isForBrowser -prefsLen 5850 -prefMapSize 179366 -parentBuildID 20190620195126 -greomni /usr/lib/firefox/omni.ja -appomni /usr/lib/firefox/browser/omni.ja -appdir /usr/lib/firefox/browser 955 true tab
 8411 pts/0    Sl     0:24                  |   \_ /usr/lib/firefox/firefox -contentproc -childID 5 -isForBrowser -prefsLen 7065 -prefMapSize 179366 -parentBuildID 20190620195126 -greomni /usr/lib/firefox/omni.ja -appomni /usr/lib/firefox/browser/omni.ja -appdir /usr/lib/firefox/browser 955 true tab
31147 pts/0    Sl     0:00                  |   \_ /usr/lib/firefox/firefox -contentproc -childID 10 -isForBrowser -prefsLen 9059 -prefMapSize 179366 -parentBuildID 20190620195126 -greomni /usr/lib/firefox/omni.ja -appomni /usr/lib/firefox/browser/omni.ja -appdir /usr/lib/firefox/browser 955 true tab
32497 pts/0    Sl     0:04                  |   \_ /usr/lib/firefox/firefox -contentproc -childID 11 -isForBrowser -prefsLen 9059 -prefMapSize 179366 -parentBuildID 20190620195126 -greomni /usr/lib/firefox/omni.ja -appomni /usr/lib/firefox/browser/omni.ja -appdir /usr/lib/firefox/browser 955 true tab
11810 pts/0    S      0:00                  \_ xterm
11812 pts/1    Ss     0:00                      \_ bash
  406 pts/1    R+     0:00                          \_ ps axf

Я проверил ubuntu и splash...splash — это параметр grub, который сам по себе создает некоторые проблемы. Мне

/sbin/init всплеск -параметр

не имеет смысла, но

/sbin/init первая -часть -из -cmd -строка

имеет смысл.

Кстати, вы знаете этот комментарий в init/main.c о том, что LILO каким-то образом передает «auto» в командную строку? Этот анализ командной строки загрузчиком, ядром, initrd/init и /sbin/init (для уровня выполнения или systemd -target )не так прост.

ДОБАВЛЕНО:

"человек пс" говорит:

   args        COMMAND   command with all its arguments as a string.
                         Modifications to the arguments may be shown.
                         The output in this column may contain spaces.
                         A process marked <defunct> is partly dead,
                         waiting to be fully destroyed by its parent.
                         Sometimes the process args will be unavailable;
                         when this happens, ps will instead print the
                         executable name in brackets.

Так вот как [kthreadd] с pid 2 и его дочерние процессы -получают скобки! Мне просто интересно, почему МОГУТ отображаться «модификации аргументов».

2
27.01.2020, 23:41

Теги

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