牛、豚、鶏、どれか一つ食べられなくなるとしたら?

Linuxのシェルについて質問です。

とりあえず説明するためにソース張ります。

OS : CentOS7
------------------------------------------------------------------------
1  #!/bin/bash
2
3  if [ $# -eq 0 ]; then
4    echo '引数入力して'
5    exit
6  elif [ 'start' = $1 ]; then
7    ./getCpuUseRate.sh &
8    ./getResourceInfo.sh &
9    ./getDiskIO.sh &
10    exit
11  elif [ 'stop' = $1 ]; then
12    CpuUseRatePID=$(ps -ef | grep getCpuUseRate.sh | grep -v grep | awk '{print $2}')
13    MemoryUseRatePID=$(ps -ef | grep getMemoryUseRate.sh | grep -v grep | awk '{print $2}')
14    DiskIOPID=$(ps -ef | grep getDiskIO.sh | grep -v grep | awk '{print $2}')
15    kill $CpuUseRatePID
16    kill $MemoryUseRatePID
17    kill $DiskIOPID
18    exit
19  else
20    echo '引数が正しくない'
------------------------------------------------------------------------

簡単に説明すると、引数に 'start' を渡すと
リソース情報を取得するシェルをバックグラウンドで実行します。

7 ./getCpuUseRate.sh & # sar -u 1 の結果をリダイレクトしているだけのシェル
8 ./getResourceInfo.sh & # sar -r 1 の結果をリダイレクトしているだけのシェル
9 ./getDiskIO.sh & # sar -d 1 の結果をリダイレクトしているだけのシェル

引数に 'stop' を与えると、引数 'start' の時に呼び出したシェルのプロセスIDを取得して、
取得したプロセスIDを kill するだけの簡単なシェルです。

ここで質問の本題に入るのですが、
上記のシェルで引数に 'stop' を渡したときの動きで、
引数 'start' の時に呼び出したシェルは kill してくれるのですが、
7,8,9行目で実行した sar コマンドがずっとバックグラウンドで動き続けている状態でした。

期待している動きとしては、
引数 'start' の時に呼び出したシェルを kill すれば、バックグラウンドで動いている sar コマンドも
死ぬものと思っていました。

期待した動きをさせるためにはどのようにすればよいでしょうか?

お手数ですが、どなたかご教授お願い致します。

A 回答 (2件)

> 期待した動きをさせるためにはどのようにすればよいでしょうか?



うろ覚えで申し訳ないのですが、参考までに。

シェルスクリプト中で割り込みを掛けられたことをtrapで拾うことが可能だったはずなので
割り込みをかけられたらシェル中でさらにsarに対し割り込みを掛けて終了するように
変更すればどうでしょうか。
すみませんが使用方法はmanで確認願います。
    • good
    • 0

ちょっと確認.



どれでもいいけど, 例えば getCpuUseRate.sh の中がどうなっているかは明らかにできますか (簡単のため一番短いのがいいです)?
    • good
    • 0
この回答へのお礼

★getCpuUseRate.sh
#!/bin/bash

START_TIME=`date +%Y%m%d_%H%M%S`
FILENAME=CpuUseRate

#1秒ごとにCPU使用率を吐き出す
sar -u 1 >> ${FILENAME}_${START_TIME}.txt

です!

お礼日時:2016/11/24 00:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!