a_command myfile
쌍을 하나의 인스턴스로만 제한 해야 합니다 .
- 내 특별한 경우에는
qemu-system-x86_64 [options] -drive file=myfile.img,format=raw
- 스크립트는 둘 다
qemu-system-x86_64
실행 중인지 확인해야 합니다.그리고파일이myfile.img
열려 있습니다.myfile.img
rw-open이라면 어떤 프로그램도 실행되지 않게 하는 것이 더 안전할 것 같습니다 .
어떻게 해야 하나요?
답변1
Stephen Kitt는 주석에서 이것이 처음에는 필요하지 않을 수 있다고 지적했지만, pidof
및 를 결합하여 특정 바이너리가 실행 중인지, 특정 파일이 열려 있는지 확인할 수 있습니다 lsof
.
pidof
인수로 주어진 프로그램을 실행하는 프로세스의 PID를 찾습니다. 하나 이상의 인스턴스가 발견되면 "true"를 반환하고, 그렇지 않으면 "false"를 반환합니다. 출력은 여기서 관련이 없으며 리디렉션에 의해 억제됩니다./dev/null
lsof
특정 파일을 여는 모든 프로그램이 나열됩니다. 하나 이상의 프로그램에 열린 파일 설명자가 있으면 "true"를 반환하고, 그렇지 않으면 "false"를 반환합니다.
간단한 확인은 다음과 같습니다.
#!/bin/bash
# Check if program is running and image file open. If yes, then exit right away.
if pidof qemu-system-x86_64 >/dev/null && lsof myfile.img >/dev/null
then
printf -- "An instance of qemu is running and file 'myfile.img' is open. Exiting!\n"
exit 1
fi
# If at least one is not the case, execute your code here
보다 복잡한 설정에서는 실제로 qemu-system-x86_64
자신의 설정이 열리는 지 확인할 수 있습니다 myfile.img
.
if lsof myfile.img | grep -q '^qemu-system-x86_64'
then
printf -- "File 'myfile.img' is opened by program 'qemu-system-x86_64'. Exiting!"
exit 1
fi
grep
프로그램 이름이 출력 줄의 첫 번째 항목인지 확인하려면 프로그램 이름에 RegEx 관련 문자가 포함되어 있지 않아야 합니다 .