UNIXシェルスクリプト第10章 Part3

プロセス名に対してシグナルを送るシェルスクリプト Kill

※killコマンドはプロセスIDに対してシグナルを送る。

プロセスIDは数字で表され、ユーザはpsコマンドを使って求めるプロセスが南蛮のプロセスIDで走っているのかを確認しなくてはならない。

 

プロセス番号ではなくプロセスの名前を指定してシグナルを送る。

実際にシグナルを送る前に確認応答が発生する。

 

-singnal

ここにはシグナルの番号やシグナルの種類を指定する。

kill(1)コマンドで指定できる形式でならどう書いても良い。

例えば -9 あるいは -KILL とすればそのプロセスに 9 番のシグナルを送る。

この指定がなかったらデフォルトとして 15 番を送る。

 

. SystemType.sh

ドットコマンド . で関数を定義したシェルスクリプトファイルを読みこませる必要がある。または、関数を直接書き込む必要がある。

 

ps $PS_OPTS

psコマンドはプロセスの情報を表示する。

 

sed '1d'

1行目を削除する。

 

grep "$NAME"

grepコマンドは指定した文字列を含む行を検索する。

 

grep -v "$0"

grepコマンドの -vオプションはパターンにマッチしなかった行を表示する。

 

exec < $PROCESS_LIST

while read LINE

do

    IFS=$OLD_IFS

    ....

done

execコマンドは新しいプロセスを生成せずにコマンドを実行する。

execコマンドを使って標準入力を直接ファイルから読み込むことで、while文の入力がこのシェルスクリプト上で動作する。

while read LINE

do

    IFS=$OLD_IFS

done < $PROCESS_LIST

とすると、このシェルスクリプトの子供のシェルとして動作する。

今回while文内でFOUNDという変数に値を代入し、while文を抜けてからその値によって処理を行っている。そのため、子供のシェルとして動作させてはいけない。

 

set $LINE

setコマンドはシェル変数を設定する。

setコマンドで位置パラメタをリセットすることにより、1番目のフィールドが$1、2番目のフィールドが$2というように順に代入される。

 

LINE=`echo "$LINE" | cut -c $COL-`

cutコマンドはファイルの各行から指定した範囲を表示する。

-cオプションは指定した部分を各文字を表示する。

$COL-のように指定すると、指定位置から行末までとなる。

 

set dummy $LINE

shift

PRONAME=$1

最初にdummyという文字列を意識的に入れておくことで、setコマンドにハイフンから始まる名前をオプションとして認識させないようにしている。

その後shiftで位置パラメタを1個ずらしてdummy部分を書く女子、コマンド名称をPRONAME変数に代入する。

 

"$PID $OWNER $PRONAME (y/n)? " </dev/tty

標準入力をPROCESS_LISTというファイルからリダイレクトしているために、このままでは標準入力を受け付けるところがない。

キーボードからの入力を可能にするには、このように/dev/ttyをリダイレクトしなくてはならない。