14.killps
プロセス名指定 kill
投稿者 | s1080134 |
---|---|
作成日 | 2003/09/09 (学部4年夏休み) |
最終更新日 | 2003/09/09 |
言語 | bash |
Table of Contents |
説明
kill コマンドを使用する際に、プロセス ID ではなくコマンド名で指定するための CUI フロントエンドです。
後記:会津大学の環境にはもちろん、Linuxディストリにも killall がなかった時代だったような気がします。
書式
使い方は以下のようになっています。
String specification kill. kill front end. Usage: killps [kill_options] [: [egrep options]] pattern ex) killps emacs ex) killps -9 emacs ex) killps '.*' ex) killps 'emacs|kterm' ex) killps : -v tcsh ex) killps -KILL : -v tcsh ex) yes | killps -9 : -v tcsh Note: Don't use kill's [-s signal] option. Use [-signal] option
マッチするプロセスがあれば
s1080134 4887 225 0 16:44:08 pts/1 0:00 mnews kill 4887 ? (y/[n])
のように聞いてくるので、y か n を入力してください。そのような確認がいらないという場合は yes コマンドを使用してください。また文字列マッチングには egrep コマンドを使っているので egrep の正規表現を使えます。その際は、シェルのワイルドカードにならないように ' ' ではさむなどしてください。 egrep のオプションを使用する際は、 kill のオプションではないことを示すために : を先頭に入力してください。
ソースコード
#!/usr/local/bin/bash # Copyright (C) Naotoshi Seo, s1080134 function printUsage(){ cmd=${0##*/} echo "String specification kill. kill front end." 1>&2 echo "Usage: $cmd [kill_options] [: [egrep options]] pattern" 1>&2 echo " ex) $cmd emacs" 1>&2 echo " ex) $cmd -9 emacs" 1>&2 echo " ex) $cmd '.*'" 1>&2 echo " ex) $cmd 'emacs|kterm'" 1>&2 echo " ex) $cmd : -v tcsh" 1>&2 echo " ex) $cmd -KILL : -v tcsh" 1>&2 echo " ex) yes | $cmd -9 : -v tcsh" 1>&2 echo " Note: Don't use kill's [-s signal] option. Use [-signal] option" 1>&2 } if [ $# -lt 1 ]; then printUsage exit 0 fi if [ "$1" = ":" ];then shift else #Kill Options while [ $# -gt 0 ] do if [ $(expr "x$1" : 'x-') -eq 0 ];then if [ "$1" = ":" ];then shift fi break fi options="$options$1 " shift done if [ $# -eq 0 ]; then printUsage exit 1 fi fi #main for ps in `/bin/ps -f -u $USER | grep -v $0 | egrep "$@" | sed 's/ /;/g'` do ps=`echo "$ps" | sed 's/;/ /g'` echo "$ps" pid=`echo $ps | awk '{print \$2}'` [ $(expr "$pid" : '[0-9]*$') -eq 0 ] && continue echo -n "kill $options$pid ? (y/[n]) " read reply [ "$reply" == "y" ] && kill $options$pid done