qemu中daemonize為什麼要兩次fork

2021-06-25 22:35:28 字數 707 閱讀 2922

函式void os_daemonize(void) 將當前程序變成後台程序即放棄終端。一開始不理解為什麼要兩次fork,後來查網上資料得知,兩次fork是為了防止第乙個子程序開啟終端。首次fork使父程序退出,子程序繼承了父程序的程序組id,但具有乙個新的程序id,這就保證了子程序不是乙個程序組的首程序。呼叫s e t s i d以建立乙個新對話期,並使子程序成為了首程序。再次使用fork,使父程序(第一次fork的子程序)終止,第二個子程序作為精靈程序繼續執行。這樣就保證了該精靈程序不是對話期首程序,防止了它取得終端控制。

void os_daemonize(void)

else

exit(0);

} else if (pid < 0)

exit(1);

close(fds[0]);

qemu_set_cloexec(fds[1]);

setsid();

pid = fork();

if (pid > 0)

exit(0);

else if (pid < 0)

exit(1);

umask(027);

signal(sigtstp, sig_ign);

signal(sigttou, sig_ign);

signal(sigttin, sig_ign);

}}

**:

為QEMU新增新的QMP命令

qmp命令由結構 mon cmd t 定義,該結構在 monitor.c 的開頭被定義。注意檢視它的成員以及該結構上面的注釋。為了新增新的 qmp命令,需要修改 qemu monitor.hx 注意檢視最開始的說明 defheading 用於在help text 和texi 中增加標題頭 處於ste...

qemu中的Hbitmap資料結構

儘管unsigned long已經能夠勝任bitmap的實現,但是這樣實現的bitmap,當bitmap比較大的時候,它的操作效率很低。典型的,像為blockdriver維持bitmap,磁碟檔案的每個塊都對應乙個bit位,那麼這張bitmap表是很大的。如果在熱遷移過程中,需要將映象檔案熱遷移到目...

在Ubuntu 10 04中配置qemu虛擬網路

1 device drivers network device support universal tun tap device driver support 2 networking support networking options 802.1d ethernet bridgingapt ge...