![프로그램이 이미 실행 중이고 특정 파일이 열려 있는 경우 프로그램이 시작되지 않도록 방지](https://linux55.com/image/210964/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%EC%9D%B4%20%EC%9D%B4%EB%AF%B8%20%EC%8B%A4%ED%96%89%20%EC%A4%91%EC%9D%B4%EA%B3%A0%20%ED%8A%B9%EC%A0%95%20%ED%8C%8C%EC%9D%BC%EC%9D%B4%20%EC%97%B4%EB%A0%A4%20%EC%9E%88%EB%8A%94%20%EA%B2%BD%EC%9A%B0%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%EC%9D%B4%20%EC%8B%9C%EC%9E%91%EB%90%98%EC%A7%80%20%EC%95%8A%EB%8F%84%EB%A1%9D%20%EB%B0%A9%EC%A7%80.png)
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 관련 문자가 포함되어 있지 않아야 합니다 .