VirtualBox가 종료되면 netcat 중지

VirtualBox가 종료되면 netcat 중지

OSX의 VirtualBox에서 netcat을 사용하여 DOS 프로그램의 인쇄 출력을 리디렉션합니다.

#!/bin/bash
VBoxManage startvm FreeDOS
while :
do
    nc -l 1235 | lpr
done

VirtualBox가 닫혀도 netcat이 계속 실행된다는 점을 제외하면 작동합니다. 더 좋은 방법이 있을 겁니다!

답변1

다음과 같은 방법으로 이 작업을 수행할 수 있습니다.

  1. CNC 배경 | LPG 파이프라인
  2. VM 상태 폴링
  3. 가상 머신이 종료되면 백그라운드 파이프를 종료합니다.

다행히 VBoxManage는 (3)을 달성할 수 있는 방법을 제공합니다. VBoxManage에는 showvminfo가상 머신의 현재 상태를 제공하는 명령이 있습니다 .

VBoxManage startvm FreeDOS

(
    while :
    do
        nc -l 1235 | lpr
    done
)&


while sleep 10; do
    vmstate=$(VBoxManage showvminfo --machinereadable FreeDOS | awk -F= '{ if ($1=="VMState") print $2}' | tr -d '"')
    case $vmstate in
        running)
            echo "Still running."
            ;;
        *)
            echo "VM not running. Attempting to kill netcat"
            kill %%
            exit 0;
    esac
done

현재 이것은 "실행"만 처리하고 다른 모든 것은 처리하지 않는다는 점에 유의하십시오. 귀하의 사례 진술서에서 다른 주를 고려할 수도 있습니다. 또한 netcat의 -k 매개변수를 사용하여 첫 번째 while 루프를 단순화할 수 있습니다(따라서 전혀 루프할 필요가 없습니다).

답변2

나는 포기한다! nc 대신 ncat을 사용하여 연결 문제를 해결하고, 작동이 안되서 백그라운드 작업을 포기했습니다. 다음은 종료 시 프로세스를 작동하고 닫습니다.

if VBoxManage startvm FreeDOS; then    
    if ! pgrep ncat -p 1235 -l ; then
        while :
        do
            ncat -p 1235 -l | lpr
        done
    fi
fi

관련 정보