首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获取每个vncviewer后台进程的会话号并将它们存储在不同的变量中

如何获取每个vncviewer后台进程的会话号并将它们存储在不同的变量中
EN

Stack Overflow用户
提问于 2022-08-27 20:02:33
回答 1查看 42关注 0票数 0

我非常喜欢使用FreeBSD中的bhyve虚拟机。您可能知道,当虚拟机加载的操作系统停止时,虚拟机的进程不会被终止。这不是一个bug,但是开发人员说,这样可以加快虚拟机的启动过程。现在,我想创建一个脚本来杀死“死”虚拟机,这些虚拟机在我执行"ps ax \ grep bhyve“时仍然列出,但是不能再使用了。让我们以下面的例子为例:

代码语言:javascript
复制
mario@marietto:/home/marietto # ps ax | grep bhyve

13720  -  Is      0:00.00 bhyve: system.pwd (bhyve)
13721  -  Is      0:00.00 bhyve: system.grp (bhyve)
13831  -  Ss      0:00.00 bhyve: system.pwd (bhyve)
13832  -  Ss      0:00.00 bhyve: system.grp (bhyve)
13826  4  SC+     0:17.34 bhyve: vm2 (bhyve)
13715  1  IC+     1:00.55 bhyve: vm4 (bhyve)
13852  3  S+      0:00.00 grep bhyve

在本例中,我有两个虚拟机,名为vm2vm4,它们变成了幽灵,因为它们中的os已经停止。为了明确起见,我想向您展示我通常用来启动bhyve vm的脚本是怎样的:

代码语言:javascript
复制
bhyve -S -c sockets=2,cores=2,threads=2 -m 8G -w -H -A \
-s 0,hostbridge \
-s 1,nvme,/dev/nvd0,bootindex=1 \
-s 2,virtio-blk,/dev/$vmdisk4 \
-s 3,virtio-blk,/dev/$vmdisk8 \
-s 4,virtio-blk,/dev/$vmdisk11 \
-s 10,virtio-net,tap2 \
-s 11,virtio-9p,sharename=/ \
-s 12,hda,play=/dev/dsp,rec=/dev/dsp \
-s 29,fbuf,tcp=0.0.0.0:5902,w=1600,h=950 \
-s 30,xhci,tablet \
-s 31,lpc \
-l bootrom,/usr/local/share/uefi-firmware/BHYVE_BHF_CODE.fd \
vm2 < /dev/null & sleep 2 && vncviewer 0:2

现在,由于没有任何简单的方法可以知道虚拟机是鬼还是正在运行,所以我想到这样的系统:

代码语言:javascript
复制
mario@marietto:/home/marietto # ps ax | grep vnc

13841  4  S+      0:00.03 vncviewer 0:2
13727  1  S+      0:00.04 vncviewer 0:4
13854  3  S+      0:00.00 grep vnc

查看器会话号是确定哪个虚拟机真正运行的最安全的方法,因为当虚拟机真正运行时,我从未关闭vncviewer窗口,但我最小化了它的窗口,而且由于我将相同的数字关联到虚拟机和vncviewer会话,所以我确信vm2vm4仍然在运行。当我将停止vm2vm4时,应该确保关闭相应的vnc会话。现在,我要做的是创建一个脚本,在这种情况下,作为输出可以为我提供24。因此,脚本应该将数字2分配给第一个变量,将number 4分配给第二个变量:

代码语言:javascript
复制
$runvm1 = 2
$rvnvm2 = 4

稍后,我将像这样完成脚本:

代码语言:javascript
复制
bhyvectl --vm=$runvm1 --force-reset
bhyvectl --vm=$runvm1 --destroy
bhyvectl --vm=$runvm2 --force-reset
bhyvectl --vm=$runvm2 --destroy

因为我希望重置和销毁所有仍在列出的进程之间可见的鬼虚拟机:

代码语言:javascript
复制
mario@marietto:/home/marietto # ps ax | grep bhyve
EN

回答 1

Stack Overflow用户

发布于 2022-09-18 18:47:22

这会得到你的价值。

代码语言:javascript
复制
#!/bin/sh

BASE=`basename "$0" ".sh" `
TMP="/tmp/tmp.$$.${BASE}"

echo "
mario@marietto:/home/marietto # ps ax | grep bhyve

13720  -  Is      0:00.00 bhyve: system.pwd (bhyve)
13721  -  Is      0:00.00 bhyve: system.grp (bhyve)
13831  -  Ss      0:00.00 bhyve: system.pwd (bhyve)
13832  -  Ss      0:00.00 bhyve: system.grp (bhyve)
13826  4  SC+     0:17.34 bhyve: vm2 (bhyve)
13715  1  IC+     1:00.55 bhyve: vm4 (bhyve)
13799  8  IC+     1:00.55 bhyve: abc_vm4 (bhyve)
13852  3  S+      0:00.00 grep bhyve
" >${TMP}.testinput

cat "${TMP}.testinput" | grep '(bhyve)' |
    awk '{
        if( $6 ~ /^vm/ ){
            id=substr( $6, 3 ) ;
            printf("%s|%s|%s\n", id, $6, $1 ) ;
        } ;
    ### Sample output:
    ### 2|vm2|13826
    ### 4|vm4|13715
    }' |
    awk -F \| 'BEGIN{ indx=0 ; }{
        indx++
        printf("runvm"indx" = %s\n", $1 ) ;
    ### Sample output:
    ### runvm1 = 2
    ### runvm2 = 4
    }'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73514049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档