Делает ли execve ()дочерний элемент не связанным с родителем?

Команды, которые просто работают

Чтобы быть абсолютно уверенным, что это будет работать, мы можем заставить Buildroot собрать QEMU для нас и использовать точный интерфейс командной строки QEMU, предоставленный Buildroot по адресу:https://github.com/buildroot/buildroot/blob/2019.05/board/qemu/x86_64/readme.txt

git clone https://github.com/buildroot/buildroot
cd buildroot
git checkout 2019.05
make qemu_x86_64_defconfig
printf '
BR2_CCACHE=y
BR2_PACKAGE_HOST_QEMU=y
BR2_PACKAGE_HOST_QEMU_LINUX_USER_MODE=n
BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y
BR2_PACKAGE_HOST_QEMU_VDE2=y
' >>.config
make olddefconfig
time make BR2_JLEVEL="$(nproc)" HOST_QEMU_OPTS='--enable-sdl --with-sdlabi=2.0'
./output/host/bin/qemu-system-x86_64 \
  -M pc \
  -kernel output/images/bzImage \
  -drive file=output/images/rootfs.ext2,if=virtio,format=raw \
  -append "rootwait root=/dev/vda" \
  -net nic,model=virtio \
  -net user \
;

Теперь вы остались в оболочке и можете войти в систему с именем пользователяroot(без пароля ).

enter image description here

Обратите внимание, однако, что сборка Buildroot по умолчанию не имеет интересного графического интерфейса, такого как X11 по умолчанию, поскольку это не самый распространенный вариант использования для этого проекта. Я рассказал об этом в:Как установить X11 в моей собственной системе Linux Buildroot?

Но поскольку Buildroot недостаточно фокусируется на части выполнения для моих нужд (больше автоматизации, больше типов загрузки, пошаговая отладка GDB ), я расширил его с помощью некоторых дополнительных скриптов в этом проекте:https://github.com/cirosantilli/linux-kernel-module-cheat

Другие ISA, упомянутые в:https://cirosantilli.com/linux-kernel-module-cheat/#buildroot-hello-world

Сбой сборки Buildroot 2019.08 QEMU, поскольку выпуск QEMU 3.1.1 содержит неисправную сборку x86 _64 сборка... Сбой сборки QEMU 3.1.1

Протестировано в Ubuntu 19.04.

-2
25.11.2020, 03:14
1 ответ

execve()полностью заменяет память.

Он закрывает те дескрипторы файлов, которые не помечены как оставленные открытыми. (Обычно так помечаются STDIN, STDOUT и STDERR. )См. флаг O_CLOEXEC. (Хорошо, точнее, он закрывает те файловые дескрипторы, которые помечены как закрытые.)

Он сбрасывает обработчики сигналов, но оставляет SIG _IGN и SIG _DFL как есть.

Это не изменяет взаимосвязь родитель/потомок или управляющий терминал.

Я не уверен насчет объектов SysV IPC, но я думаю, что они не имеют особого отношения к -процессу существования.

1
18.03.2021, 22:47

Теги

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