QMP是一種基於JSON格式的傳輸協議,我們能利用它與一個QEMU虛擬機實例進行交互,例如查詢,更改虛擬機的狀態,獲取設備信息等等。下面是幾種創建QMP的方法以及對其它的一些基本命令的使用:
1、基於Telnet創建QMP
首先利用如下命令啟動一個QEMU虛擬機實例
qemu-system-x86_64 linux-0.2.img -qmp tcp:localhost:4444,server --monitor stdio
然后啟動Telnet連接localhost的4444端口
telnet localhost 4444
這時會在Telnet所在的目錄下顯示如下內容:
Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. {"QMP": {"version": {"qemu": {"micro": 0, "minor": 0, "major": 2}, "package": " (Debian 2.0.0+dfsg-2ubuntu1.21)"}, "capabilities": []}}
2、基於UNIX socket 創建QMP
依然先啟動一個QEMU虛擬機實例
qemu-system-x86_64 linux-0.2.img -qmp unix:qmp-sock,server
其中qmp-sock文件會在命令執行之后自動在本地目錄創建,當然也可以指定一個sock文件
然后在qmp-sock所在目錄下,利用如下命令與QMP建立連接
nc -U qmp-sock
3、QMP基本命令
(1)在創建了QMP之后,在輸入其他命令之前,首先要輸入如下命令:
{ "execute": "qmp_capabilities" }
只有在返回下面的指令之后,我們才能使用其他命令:
{ "return": {}}
(2)查詢虛擬機狀態:
{ "execute": "query-status" }
當虛擬機正常運行時,會返回如下指令:
{"return": {"status": "running", "singlestep": false, "running": true}}
當虛擬機處於熱遷移的監聽狀態時,返回如下指令:
{"return": {"status": "inmigrate", "singlestep": false, "running": false}}
其他指令利用類似於上述的方式交互即可。