歡迎您光臨本站 註冊首頁

四種UNIX下只殺死別人進程的程序

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  有時你需要程序只在一個TTY上運行,但對操作員來講,又不可能讓他在
命令行上發 ps -ef 命令,然後殺死其他的進程. 在你的菜單上調用下
面的過程 only1tps your_program kill 就可以只殺死其他 TTY 上啟
動的 your_program 進程。是不是很方便?

# only1tps - 從 ps -ef 的結果中找出某些進程在其他 tty 是否啟動
# 參數為進程程序名(包括路徑,可只寫前一部分)、list/kill
# (C) M.L.Y 2000.12

# 注意: 直接從 ps -ef 的某一列取 CMD/COMD/COMMAND 會發生問題:
# 當 ps -ef 中某個進程的 TIME 超過 99.xx 時, 輸出將后移,
# 所以乾脆從TIME的中間開始往後找空格, 之後即是 CMD/COMD/COMMAND

if [ $1 ] ; then
if [ $2 -a $2 = kill ] ; then
KILL=1
else
KILL=0
fi
my_tty=`tty`
tty_name=`expr substr $my_tty 6 6`
# NCR UNIX: ps -t pts/2 -> TTY: pts/2
# ps -ef -> TTY: pts002 or pts/2
if [ `uname` = UNIX_SV ] ; then
tty_name=`echo $tty_name | awk '{i=index($0, "/");\
if (i > 0)\
{printf "%s%03d",substr($0,1,i-1),substr($0,i+1);}\
else {printf "%s",$0;}\
}'`
fi
if [ `uname` = SCO_SV ] ; then
AWK=awk
TIMECOL=50
TTYCOL=34
elif [ `uname` = NonStop-UX ] ; then
AWK=awk
TIMECOL=50
TTYCOL=40
elif [ `uname` = HP-UX ] ; then
AWK=awk
TIMECOL=45
TTYCOL=34
elif [ `uname` = UNIX_SV ] ; then
AWK=nawk
TIMECOL=43
TTYCOL=34
else
echo Unknown UNIX version!!!
AWK=echo
TIMECOL=50
TTYCOL=34
fi
if [ `uname` = UNIX_SV ] ; then
ps -ef|$AWK 'BEGIN {r=0} \
substr(substr($0,'"$TIMECOL"'),index(substr($0,'"$TIMECOL"')," "
)+1)\
~"^'"$1"'" {tty=substr($0, '"$TTYCOL"', 7);i=match(tty, /[a-zA-Z
]/);\
if (i > 0) tty=substr(tty, i);j=index(tty, " ");\
if (j > 0) tty=substr(tty, 1, j-1);\
i=match(tty, /^pts/); killit=0;\
if (i > 0) {j=index(tty,"/");\
if (j > 0) ttyno=substr(tty,j+1)+0;\
else ttyno=substr(tty,4)+0;\
myttyno=substr("'"$tty_name"'",4)+0;\
if (ttyno != myttyno) killit=1;}\
else if (tty != "'"$tty_name"'") killit=1;\
if (killit == 1) \
{r=r+1;print;if ('"$KILL"' == 1) \
{print "kill " $2; system("kill " $2)} } }; \
END {if(r==0) print "其他 tty 未啟動該進程!"}'
else
ps -ef|$AWK 'BEGIN {r=0} \
substr(substr($0,'"$TIMECOL"'),index(substr($0,'"$TIMECOL"')," "
)+1)\
~"^'"$1"'" {tty=substr($0, '"$TTYCOL"', 7);i=match(tty, /[a-zA-Z
]/);\
if (i > 0) tty=substr(tty, i);j=index(tty, " ");\
if (j > 0) tty=substr(tty, 1, j-1);\
if (tty != "'"$tty_name"'") \
{r=r+1;print;if ('"$KILL"' == 1) \
{print "kill " $2; system("kill " $2)} } }; \
END {if(r==0) print "其他 tty 未啟動該進程!"}'
fi
fi

# End of file.


[火星人 ] 四種UNIX下只殺死別人進程的程序已經有303次圍觀

http://coctec.com/docs/unix/show-post-73987.html