daemoniz not working on MacOS

Bug #1859920 reported by JS
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
QEMU
Expired
Undecided
Unassigned

Bug Description

OS: MacOS Catalina 10.15.2
Qemu install via brew: brew install qemu

qemu-system-x86_64 -version
QEMU emulator version 4.2.50 (v4.2.0-13-g084a398bf8-dirty)
Copyright (c) 2003-2019 Fabrice Bellard and the QEMU Project developers

---

Start Ubuntu Desktop 18.04 client as follow:

IMG_CD=$HOME/Downloads/iso/ubuntu-18.04.3-desktop-amd64.iso
IMG_FILE=$HOME/code/vm/qemu/u64d01.qcow2
MAC_ADDR=xx:xx:xx:xx:xx:xx

qemu-system-x86_64 \
-no-user-config -nodefaults \
-show-cursor \
-name u64d01 \
-M q35,accel=hvf,usb=off,vmport=off \
-cpu host -smp 4 -m 2048 \
-overcommit mem-lock=off \
-overcommit cpu-pm=off \
-rtc base=utc,clock=host \
\
-device virtio-tablet-pci \
-device virtio-vga \
\
-device virtio-blk-pci,drive=ssd1 \
-drive id=ssd1,file=$IMG_FILE,if=none,format=qcow2 \
\
-device virtio-net-pci,netdev=nic1,mac=$MAC_ADDR \
-netdev user,id=nic1,ipv4=on,ipv6=on,hostname=u64d01,hostfwd=tcp::2222-:22 \
\
-device ich9-intel-hda,id=snd,msi=on \
-device hda-output,id=snd-codec0,bus=snd.0,cad=0,audiodev=snd0 \
-audiodev coreaudio,id=snd0,out.buffer-count=10000 \
\
-daemonize

Give following error:

objc[3432]: +[NSNumber initialize] may have been in progress in another thread when fork() was called.
objc[3432]: +[NSNumber initialize] may have been in progress in another thread when fork() was called. We cannot safely call it or ignore it in the fork() child process. Crashing instead. Set a breakpoint on objc_initializeAfterForkError to debug.

I checked "ps -ef|grep qemu" before and after the command, there was no qemu process running.

Revision history for this message
Thomas Huth (th-huth) wrote :

Have you tried to disable the GUI with "-display none" already?

Changed in qemu:
status: New → Incomplete
Revision history for this message
JS (js1943) wrote :

I tried with following and it work:

qemu-system-x86_64 -no-user-config -nodefaults -name u64d01 -M q35,accel=hvf,usb=off,vmport=off -cpu host -smp 4 -m 8192 -overcommit mem-lock=off -overcommit cpu-pm=off -rtc base=utc,clock=host -device virtio-blk-pci,drive=ssd1 -drive id=ssd1,file=/Users/js/code/vm/qemu/u64s01.qcow2,if=none,format=qcow2 -device virtio-net-pci,netdev=nic1,mac=52:54:98:76:54:33 -netdev user,id=nic1,ipv4=on,ipv6=on,hostname=u64d01,hostfwd=tcp::2222-:22 -daemonize -display none -device virtio-tablet-pci -device virtio-vga -show-cursor

The difference from my original command:
(1) removed -audiodev
(2) added -display none

So (1) and (2) together allow -daemonize work correctly.

Other observation during testing:

- If I only do (1), but not (2), the command will not exit, I cannot ssh into the vm. So it seems vm initialization is stuck. I can ctrl-c to break it.

- If I don't do (2), regardless of (1), I get following errors:
objc[1962]: +[NSNumber initialize] may have been in progress in another thread when fork() was called.
objc[1962]: +[NSNumber initialize] may have been in progress in another thread when fork() was called. We cannot safely call it or ignore it in the fork() child process. Crashing instead. Set a breakpoint on objc_initializeAfterForkError to debug.

Not sure if above observations are expected or unhandled error.

Revision history for this message
JS (js1943) wrote :

I mixed up some thing in #2 above. Please ignore it and use following:

---

I tried with following and it work:

qemu-system-x86_64 -no-user-config -nodefaults -name u64d01 -M q35,accel=hvf,usb=off,vmport=off -cpu host -smp 4 -m 8192 -overcommit mem-lock=off -overcommit cpu-pm=off -rtc base=utc,clock=host -device virtio-blk-pci,drive=ssd1 -drive id=ssd1,file=/Users/js/code/vm/qemu/u64s01.qcow2,if=none,format=qcow2 -device virtio-net-pci,netdev=nic1,mac=52:54:98:76:54:33 -netdev user,id=nic1,ipv4=on,ipv6=on,hostname=u64d01,hostfwd=tcp::2222-:22 -daemonize -display none -device virtio-tablet-pci -device virtio-vga -show-cursor

The difference from my original command:

(1) removed -audiodev
(2) added -display none

So (1) and (2) together allow -daemonize work correctly.

Other observation during testing:

- If I only do (1), but not (2):

  - The command will not exit. I can break it with ctrl-c.
  - A qemu-system-x86_64 process is created in background, but I cannot ssh into the it. I have use 'kill' to kill it.

- If I don't do (1), regardless of (2), I get following errors(as in my bug description):

objc[1962]: +[NSNumber initialize] may have been in progress in another thread when fork() was called.
objc[1962]: +[NSNumber initialize] may have been in progress in another thread when fork() was called. We cannot safely call it or ignore it in the fork() child process. Crashing instead. Set a breakpoint on objc_initializeAfterForkError to debug.

Not sure if above observations are expected or unhandled error.

Revision history for this message
JS (js1943) wrote :

Anything else I should supply to move status away from incomplete?

Revision history for this message
Launchpad Janitor (janitor) wrote :

[Expired for QEMU because there has been no activity for 60 days.]

Changed in qemu:
status: Incomplete → Expired
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.