- 論壇徽章:
- 0
|
本帖最后由 rdcwayx 于 2014-03-28 16:22 編輯
腳本的一個功能是:當(dāng)前用戶下運(yùn)行了n個test進(jìn)程,通過-k[pid]殺掉指定進(jìn)程ID為pid的test進(jìn)程,如果pid為0,則殺掉所有test進(jìn)程。- #!/bin/sh
- #kill_test.sh
- stop()
- {
- pid=$1
- name="$PWD/$2"
- user=`whoami`
- echo "pid is $pid"
- echo "name is $name"
- echo "user is $user"
- if [ $pid -eq 0 ]
- then
- echo "All the process named by $name will be killed!"
- ps -ef |grep $name|grep -v grep|grep $user|awk '{print $2}'|xargs kill
- fi
- if [ $pid -gt 0 ]
- then
- kill_name=`ps -ef | grep $pid | grep $user | grep -v grep | awk '{print $8}'`
- echo "kill_name is $kill_name"
- if [ "$kill_name" = "$name" ]
- then
- # kill $pid
- echo "kill $pid"
- else
- echo "wrong pid"
- fi
- fi
- }
- PROCESS_NAME=“test”
- while getopts k:b: OPTION
- do
- case $OPTION in
- k)
- KILL_PID=$OPTARG
- stop $KILL_PID $PROCESS_NAME
- ;;
- b)
- ...
- ;;
- ?)
- ...
- esac
- done
復(fù)制代碼 在命令行中運(yùn)行該腳本:$./kill_test.sh -k26187- pid is 26187
- name is /home/zj/bin/test
- user is zj
- kill_name is /bin/sh
- /bin/sh
- name is /home/zj/bin/test
- wrong pid
復(fù)制代碼 結(jié)果把腳本中第一行的/bin/sh給打印出來了,導(dǎo)致殺test進(jìn)程失敗。
如果把第一行改成#!/bin/bash,再執(zhí)行腳本就會打印/bin/bash.
如果去掉第一行的#!/bin/sh,腳本執(zhí)行正常。
而不采用getopts,也保留第一行的#!/bin/sh,直接用$1 $2獲取選項(xiàng)參數(shù),腳本執(zhí)行也正常。
哪位大俠幫忙解釋一下?Linux zj 2.6.18-128.el5,CentOS release 5.3 (Final) |
|