LINUX.ORG.RU

[РЕШЕНО] Почему у меня не работает nohup c qemu?

 , ,


0

1

Решил путем использования Konsole, остальные эмуляторы терминала, что я пробовал, требуют сперва Ctrl+d сделать, а не просто закрывать окно крестиком.

Когда я запуская виртуальную машину командой qemu-system-x86_64 -cdrom isos/systemrescue-9.00-amd64.iso -m 1024 -enable-kvm, то если я позже закрываю окно терминала, то виртуальная машина прекращает работу, и это вполне нормально — ведь её процесс потомок bash, что запущен в эмуляторе терминала.

Но почему при запуске её командой nohup qemu-system-x86_64 -cdrom isos/systemrescue-9.00-amd64.iso -m 1024 -enable-kvm & она ведет себя так же? То есть тоже прекращает работу при закрытии терминала.

При этом команды vlc и nohup vlc & отличаются в поведении именно так, как я ожидал — при первой VLC является потомком и зависит от bash в эмуляторе терминала; при второй нет, и спокойно работает после его закрытия.

★★★★★

Последнее исправление: Vsevolod-linuxoid (всего исправлений: 5)

Думаю дело в -display опции.

По крайней мере у меня VM остаётся висеть активной, если я закрываю терминал с коммандой

# nohup qemu-system-x86_64 -cdrom netboot.xyz.iso -m 1024 -enable-kvm -display vnc=127.0.0.1:16&
Flotsky ★★
()
Ответ на: комментарий от Flotsky

А, нет, криво прочитал.

У меня не повторяется

Но почему при запуске её командой nohup qemu-system-x86_64 -cdrom isos/systemrescue-9.00-amd64.iso -m 1024 -enable-kvm & она ведет себя так же? То есть тоже прекращает работу при закрытии терминала

VM продолжает работать, терминал закрыт

Flotsky ★★
()
Ответ на: комментарий от Vsevolod-linuxoid
$ uname -a
Linux flotskypc 5.10.89-1-MANJARO #1 SMP PREEMPT Wed Dec 29 18:09:17 UTC 2021 x86_64 GNU/Linux

Manjaro, awesome WM, terminal kitty, bash

Flotsky ★★
()
Последнее исправление: Flotsky (всего исправлений: 1)

Как закрываешь терминал?

Крестик и ctrl+d - разные вещи. Кроме того, может зависеть от самого терминала и от шелла (не у всех баш).

А вообще, то что ты описал - костыльный способ запуска. Если он одноразовый то незачем закрывать терминал, если надо постоянно - команду надо в шелл-скрипт вписать (не nohup а с >> 2>&1 < & ) и запускать уже его - может заработает сразу.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 3)
Ответ на: комментарий от firkax

Крестик и ctrl+d - разные вещи.

Спасибо за подсказку. Ctrl+d работает так, как и ожидалось. Теперь буду с эмулятором терминала разбираться.

Vsevolod-linuxoid ★★★★★
() автор топика
Последнее исправление: Vsevolod-linuxoid (всего исправлений: 1)

А точно bash у тебя? zsh тянет за собой фоновые процессы, а bash вроде так не делает

SR_team ★★★★★
()
Ответ на: комментарий от Vsevolod-linuxoid

Ну значит они все такие. Делай шелл-скриптом (с & в нём внутри), тогда qemu будет чайлдом не терминального баша а сабшелла, сабшелл после завершения отдаст его init-у и терминал (или кто это делает, не помню, может тот же баш по sigterm-у) его не найдёт при обработке крестика. (я не проверял, если что, но по идее должно быть так).

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 2)
Ответ на: комментарий от Vsevolod-linuxoid

Всё, разобрался - это делает bash по SIGHUP-у. По крайней мере xterm его шлёт шеллу когда закрываешь окно (а может это и не xterm а ядро так реагирует на закрытый серверный конец pty), но я проверил ещё и ручной отсылкой через kill -HUP башу, который запущен не терминалом и у него в jobs было sleep 1000 - он тоже исчез. Возможно Konsole закрывает его другим способом.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

А вообще, то что ты описал - костыльный способ запуска.

Это чисто тестовый пуск. Для своих настоящих виртуалок у меня alias настроены, со всеми наворотами, что ты описал.

Вот так: nohup qemu-system-x86_64 ... >/dev/null 2>&1 &

Vsevolod-linuxoid ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.