「Linuxのシェルスクリプトで多重起動を防止する」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
(ページの作成:「<source lang="bash"> #!/bin/sh PROCESSNAME=`basename $0` PROCESSID=`pidof -x $PROCESSNAME` PROCESSNUM=`echo $PROCESSID | awk '{print NF}'` if [ $PROCESSNUM -gt 1 ]; then…」)
 
 
(同じ利用者による、間の5版が非表示)
1行目: 1行目:
 +
[[pidof]]を使っているもの。
 +
 +
[[Ubuntu]]なら最初から入っているはず。少なくとも[[Ubuntu 20.04 LTS]]は最初から入っていた。他の[[Linux]]は知らん。
 +
 +
[[macOS]]でもbrewからpidofを入れれば動くと思う。試してはいない。
 +
brew search pidof
 +
 +
スクリプト自体はシンプルなものなので[[bash]]でも[[zsh]]でも動くとは思う。
 +
 +
[[Linux]]には[[ワンライナー]]が好きな人も多いが、あえて噛み砕いた。
 
<source lang="bash">
 
<source lang="bash">
 
#!/bin/sh
 
#!/bin/sh
 +
 +
# 自分のプロセス名を得る
 
PROCESSNAME=`basename $0`
 
PROCESSNAME=`basename $0`
PROCESSID=`pidof -x $PROCESSNAME`
+
 
PROCESSNUM=`echo $PROCESSID | awk '{print NF}'`
+
# pidofで同じプロセス名のpidたちを取得する
 +
PROCESSIDS=`pidof -x $PROCESSNAME`
 +
 
 +
# awkで配列の要素数を数える(プロセス数を得る)
 +
PROCESSNUM=`echo $PROCESSIDS | awk '{print NF}'`
 +
 
 +
# プロセス数が1より大きければ多重起動
 
if [ $PROCESSNUM -gt 1 ]; then
 
if [ $PROCESSNUM -gt 1 ]; then
 +
  # 終了
 
   echo "multiple start"
 
   echo "multiple start"
 
   exit 0
 
   exit 0
12行目: 31行目:
  
 
</source>
 
</source>
 +
 +
[[category: Linux]]
 +
[[category: bash]]
 +
[[category: zsh]]

2020年7月2日 (木) 02:33時点における最新版

pidofを使っているもの。

Ubuntuなら最初から入っているはず。少なくともUbuntu 20.04 LTSは最初から入っていた。他のLinuxは知らん。

macOSでもbrewからpidofを入れれば動くと思う。試してはいない。

brew search pidof 

スクリプト自体はシンプルなものなのでbashでもzshでも動くとは思う。

Linuxにはワンライナーが好きな人も多いが、あえて噛み砕いた。

#!/bin/sh

# 自分のプロセス名を得る
PROCESSNAME=`basename $0`

# pidofで同じプロセス名のpidたちを取得する
PROCESSIDS=`pidof -x $PROCESSNAME`

# awkで配列の要素数を数える(プロセス数を得る)
PROCESSNUM=`echo $PROCESSIDS | awk '{print NF}'`

# プロセス数が1より大きければ多重起動
if [ $PROCESSNUM -gt 1 ]; then
  # 終了
  echo "multiple start"
  exit 0
fi

# main