Chinaunix

标题: 我有一个KSH,执行无效。 [打印本页]

作者: tideyan    时间: 2009-06-03 11:17
标题: 我有一个KSH,执行无效。
现象:写了一SH(见附录2),在日常情况下都可以使用。某一天,使用此SH(在KSH的环境下),再去杀相关进程,明明进程可以查到(见附录1),但用SH查出来PID却是空。请高手点拨。此种现象只会偶然发生,但一旦发生,就只能手工去KILL相关进程,用SH再也KILL不掉。得出的PID值一直是空。

附录1:
$ ps -fu trade
     UID   PID  PPID  C    STIME TTY       TIME COMMAND
   trade 28497 19390  2 11:13:14 pts/tf    0:00 ps -fu trade
   trade 28449     1  0 11:13:09 pts/tf    0:00 ./fund
   trade 19218 19217  0 10:47:17 pts/tf    0:00 -ksh
   trade 19390 19218  0 10:47:40 pts/tf    0:00 ksh

附录2:
PID=`ps -fu trade | awk '$8 ~ /'fund'/ {print $2}'`
if [ "$PID" = "" ]
then
        echo "process fund have exit"
else
        kill -9 $PID 2>/dev/null
        sleep 2
fi
作者: tideyan    时间: 2009-06-03 11:18
使用的是HP-UNIX,是否跟环境有关系?
作者: tideyan    时间: 2009-06-03 11:33
有人发表一下吗?顶一个。
作者: lucash    时间: 2009-06-03 11:42
标题: 回复 #1 tideyan 的帖子
这个问题我好像碰到过,你把awk里的$8改成$9或者是$NF看看
作者: tideyan    时间: 2009-06-03 11:53
$9不行吧?PS -FU TRADE,只能查出8列来。$NF是什么意思?
作者: ywlscpl    时间: 2009-06-03 12:00
说明你的sh考虑不全,某些情况下没取到pid值
作者: lucash    时间: 2009-06-03 12:02
标题: 回复 #5 tideyan 的帖子
我知道只有8列阿,我在一个脚本里就是这样的。只有8列,写$8死活不行,写$9就OK了
你试了么?
作者: tideyan    时间: 2009-06-03 12:33
我试了,使用$9会报错,但用$NF可以。

$ fund_stop.sh
process fund have exit
Check process fund status: alive error
$ ps -fu trade
     UID   PID  PPID  C    STIME TTY       TIME COMMAND
   trade 28449     1  0 11:13:09 pts/tf    0:10 ./fund
   trade 15894 19218  2 12:00:59 pts/tf    0:00 ps -fu trade
   trade 19218 19217  1 10:47:17 pts/tf    0:00 -ksh
作者: tideyan    时间: 2009-06-03 12:36
原帖由 ywlscpl 于 2009-6-3 12:00 发表
说明你的sh考虑不全,某些情况下没取到pid值


我就是想知道,还有什么情况是需要考虑进来的。而且只是偶发,不会经常出现。
作者: merlin852    时间: 2009-06-03 13:51
估计是ps -fu 时如果时间TIME那里超过一天或者很多天了,系统显示时间那里就多了一个空格出来了,你的$8就出错了
作者: tideyan    时间: 2009-06-04 10:00
原帖由 merlin852 于 2009-6-3 13:51 发表
估计是ps -fu 时如果时间TIME那里超过一天或者很多天了,系统显示时间那里就多了一个空格出来了,你的$8就出错了


呵呵。这能不能算是准确的答案?
作者: tideyan    时间: 2009-06-04 10:38
附上执行图

Snap1.jpg (91.28 KB, 下载次数: 6)

Snap1.jpg

作者: tideyan    时间: 2009-06-04 11:15
找到问题了。STIME过了一天之后,变成月 日的格式,导致$8失效。谢谢 merlin852。
作者: tideyan    时间: 2009-06-04 17:08
现在有个新问题,用$NF替换$8之后,对于进程"match_bus -s",又会出错。有什么方法解决?




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2