LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 889|回复: 6

ksh下如何实现定期清空某个正在被频繁>定向写的文件[未解决]

[复制链接]
发表于 2004-4-12 09:52:57 | 显示全部楼层 |阅读模式
因为调试并行程序没有调试器,现在只能靠打屏一步步的缩小出错范围以找到出错地点,但这样一来经常把屏幕给打死了。于是定向写,发现log增长太快,只好编个脚本定期删除一下前面的打屏结果
                                                                                                      
结果发现当log正在频繁使用的时候无效
如果用rm删除log,那么这个log不再产生,这不成
请问这个怎么处理?
谢谢!
                                                                                                      
下面是脚本
#!/bin/ksh
                                                                                                      
FZ=0
while [ 1 ]
do
    FZ=`wc log | awk '{print $1}'`
    if test $FZ -gt 1000
    then
        echo '' > log
    fi
sleep 5
done

如果有熟悉digitail unix & digital fortran 以及mpich的可知道如何利用编译或者类似c++里的try找到出错地点?
dis -s 反汇编后因为出错信息太少,也找不到出错地点
谢谢!
发表于 2004-4-12 10:01:58 | 显示全部楼层
因为调试并行程序没有调试器,现在只能靠打屏一步步的缩小出错范围以找到出错地点,但这样一来经常把屏幕给打死了。于是定向写,发现log增长太快,只好编个脚本定期删除一下前面的打屏结果

什么意思?在下还未弄明白,呵呵~~~
那个log是程序的输出吧,然后你想裁减log是吧?但你又说要查看错误,好像很矛盾~~~
 楼主| 发表于 2004-4-12 10:08:36 | 显示全部楼层
log就是你说的屏幕输出后定向到的文件,也是你说的定期缩减log

我在调试fortran+mpi的并行程序,对方没有并行调试器,而我根据出错信息没法找到出错地点,现在只好利用打印一步步的缩小出错范围,比如我怀疑tracing子程序有问题,那么就在这之前加print*,'s'调后加print*,'e',如果s出来e没出来,则这个有问题,再进一步缩小范围查找。

没办法:现在我的MSN名字都变成
飞鸢:靠打印逐步调试并行程序,从没这么弱智过

以下是我的程序的出错信息,有了解这些的,还请帮忙,谢谢!
程序f90+mpi的,运行在
CPU: Alpha
操作系统:Digital unix V4.0 878 alpha
FORTRAN:Digital Fortran 90 V4.0-1
MPI:mpich 1.2.1
编译命令:
f90 -g -non_shared -lmpich -lSZ3 -o sem semmpi.f90

程序出错:
trap:user program exception, pe_num=26:0
exc_type=5 exc_code=fffffffffffffffa exc_subcode=0
forrtl: info: Fortran error message number is 65.
PC=12009f5c8 RA=12009ed00 A0=fffffffffffffffa A1=0 A2=56
forrtl: warning: Could not open message catalog: for_msg.cat.
forrtl: info: Check environment variable NLSPATH and protection of /usr/lib/nls/msg/en_US.ISO8859-1/for_msg.cat.
forrtl: error (65): Message not found

dis -S myprogram后的文件部分对应如下:
  0x12009f5a4:  2dae005e    ldq_u   s4, 94(s5)
  0x12009f5a8:  49b402cd    extwl   s4, a4, s4
  0x12009f5ac:  f280091d    blbs    a4, 0x1200a1a24
  0x12009f5b0:  49a6172d    sll s4, 0x30, s4
  0x12009f5b4:  41310649    s8addq  s0, a1, s0
  0x12009f5b8:  49a6178d    sra s4, 0x30, s4
  0x12009f5bc:  b5af0938    stq s4, 2360(s6)
  0x12009f5c0:  204f0208    lda t1, 520(s6)
  0x12009f5c4:  47e0340c    bis zero, 0x1, s3
  0x12009f5c8:  47e03411    bis zero, 0x1, a1 此处出错
  0x12009f5cc:  21290178    lda s0, 376(s0)

我看不出来是哪里出了问题,能否告诉上面那些出错信息对应的是什么,谢谢!
发表于 2004-4-12 10:14:42 | 显示全部楼层
forrtl: error (65): Message not found

恕在下愚昧,分析日志就可以找出问题了,为什么要裁减呢?
 楼主| 发表于 2004-4-12 10:30:08 | 显示全部楼层
你说的是这个65?
error (65): Floating invalid

FOR$IOS_FLTINV. During an arithmetic operation, the floating-point values used in a calculation were invalid for the type of operation requested or invalid exceptional values. For example, when requesting a log of the floating-point values 0.0 or a negative number. For certain arithmetic expressions, specifying the -check nopower option can suppress this message (see Section 3.17). For information on allowing exceptional IEEE values, see Section 3.33.
但不知道哪个浮点数出错阿

下面这个/usr/lib/nls/msg/en_US.ISO8859-1/for_msg.cat也没有看出什么信息。
我现在为了调试启动了3个32节点的空间(系统限制,最小32节点空间)却只能利用一个在算,要是32个全打之类的就更玩玩了,它也不告诉我哪个进程出了错误,调了一周多了,还没搞定,而且资源浪费严重。

现在三个terminal都全是
s
e
s
e
发表于 2004-4-12 12:07:40 | 显示全部楼层
不好意思,实在不明白兄弟所言。:sorry
 楼主| 发表于 2004-4-12 12:13:15 | 显示全部楼层
如果了解并行计算,估计我说的应该能明白,从小语文就没学好

多谢,让你关心了这么久
临时看起来我的程序解决了,已经32个CPU运行了0.2%了,还没出错
至于ksh这种办法,以后再说了,先干更重要的
多谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表