QEMU是如何以后台进程运行的?


当使用libvirt启动QEMU后,QEMU进程便成为后台进程在运行,刚刚分析了QEMU启动的代码,将其转换为daemon进程的过程简单解释如下(QEMU-2.3.0):


1 概述

  QEMU在被libvirt启动的时候,可以传入一些参数来设置QEMU进程的运行状态,主要参数有:-runas指定以某个用户的权限运行虚拟机、-chroot改变当前QEMU的工作根目录、-daemonize让QEMU以后台进程的形式运行。
  主要的参数解析工作为函数os_parse_cmd_args(),通过系统调用getpwnam得到用户的相关信息,并赋值给变量user_pwd;得到工作根目录的字符串,并赋值给变量chroot_dir;如果是后台进程,则将变量daemonize赋值为1.
除了以上QEMU进程状态外,还有信号设置、进程名字更改、改变回话ID等。

2 启动代码分析

在main函数中,关于设置QEMU运行状态的参数的调用顺序如下:

os_setup_early_signal_handling() 2815
os_daemonize() 3772
parse_name() -> os_set_proc_name() 3783
os_find_datadir 3857
qemu_create_pidfile 4019
os_set_line_buffering 4110
realtime_init() -> os_mlock() 4228
os_setup_signal_handling 4292
os_setup_post 4354
2.1 os_setup_early_signal_handling()

代码如下:

void os_setup_early_signal_handling(void)
{
    struct sigaction act;
    sigfillset(&act.sa_mask); //初始化信号集合,将所有的信号加入集合中。
    act.sa_flags = 0; 
    act.sa_handler = SIG_IGN; //忽略所选信号。
    sigaction(SIGPIPE, &act, NULL);
}

  忽略信号SIGPIPE,

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值