a_command myfile
ペアを1つのインスタンスのみに制限する必要があります。
- 私の特別なケースでは
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を探します。 1 つ以上のインスタンスが見つかった場合は「true」を返し、そうでない場合は「false」を返します。出力はここでは関係がなく、リダイレクトによって抑制されます。/dev/null
lsof
特定のファイルを開くすべてのプログラムが一覧表示されます。 1つ以上のプログラムで開かれたファイル記述子がある場合は「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関連の文字を含めないでください。