Chinaunix
标题:
perl程序的问题
[打印本页]
作者:
engrol
时间:
2010-02-04 17:33
标题:
perl程序的问题
我有一个perl程序,使用crontab调度执行,每分钟调度一次。
一天执行:24 * 60 = 1440 次
绝大部分次数都没有问题,但有时候出现阻塞的情况,永远不会自动退出,必须用kill -9才能杀死,看不出有什么规律,我怎么也想不出阻塞的原因,直接手动执行又没有什么问题。
我真希望有一个类似gdb的程序,可以attach到某个进程调试,好象perl没有这种功能。
大家说说,有什么办法确定问题所在?
作者:
兰花仙子
时间:
2010-02-04 17:39
man perldebug
这种无法确定是否及时退出的脚本,最好设置一个文件mark.
如果程序在运行,则mark存在,程序退出后,删掉mark。
这样下一个instance启动时,就可判断前一个instance是否还alive.
作者:
dahe_1984
时间:
2010-02-04 17:49
啥意思? 我咋没看明白 仙子 说的啥呢
作者:
flw
时间:
2010-02-04 17:51
strace -p <pid>
作者:
engrol
时间:
2010-02-06 14:04
谢谢flw斑竹。
作者:
dragon23452345
时间:
2010-02-06 17:05
提示:
作者被禁止或删除 内容自动屏蔽
作者:
engrol
时间:
2010-02-10 08:53
现在问题终于出现了,根据flw斑竹的建议,我使用truss,freebsd下的类似strace工具,检查挂起的程序,发现如下问题:
sigreturn(0xbfbfe8b0) = 1163155794 (0x45545952)
sigreturn(0xbfbfe8b0) = 1163155794 (0x45545952)
sigreturn(0xbfbfe8b0) = 1163155794 (0x45545952)
sigreturn(0xbfbfe8b0) = 1163155794 (0x45545952)
sigreturn(0xbfbfe8b0) = 1163155794 (0x45545952)
sigreturn(0xbfbfe8b0) = 1163155794 (0x45545952)
sigreturn(0xbfbfe8b0) = 1163155794 (0x45545952)
sigreturn(0xbfbfe8b0) = 1163155794 (0x45545952)
sigreturn(0xbfbfe8b0) = 1163155794 (0x45545952)
sigreturn(0xbfbfe8b0) = 1163155794 (0x45545952)
sigreturn(0xbfbfe8b0) = 1163155794 (0x45545952)
sigreturn(0xbfbfe8b0) = 1163155794 (0x45545952)
sigreturn(0xbfbfe8b0) = 1163155794 (0x45545952)
sigreturn(0xbfbfe8b0) = 1163155794 (0x45545952)
sigreturn(0xbfbfe8b0) = 1163155794 (0x45545952)
sigreturn是freebsd的函数。
以上信息不断出现,看样子是产生了异常,返回以后继续产生异常。所以反复执行同一段代码,进入了一个死循环,但不知道perl为什么会出现这种情况。大家有什么意见和建议?
作者:
hitsubunnu
时间:
2010-02-10 09:38
用Devel::NYTProf 分析程序
死循环是人的逻辑问题跟 perl有啥关系
说句玩笑话:拉不出屎来总不能怪地球没引力吧
作者:
flw
时间:
2010-02-10 09:59
我这里是好的
作者:
engrol
时间:
2010-02-21 22:10
我一直在想办法解决这个问题。
我有两个一模一样的系统(我说一模一样,是说软件环境一模一样,我把FreeBSD和Perl精减后,压缩成一个20MB的文件,复制到两台裸机上)。
其中一台机器从来没有出现过这个问题。另外一台机器有两个程序出现了这个问题。用truss后,都是显示由于反复调用sigreturn,无法退出。
其中一个程序,我把use sigtrap 这行注释掉以后,有很多天没有出现了这个问题了。
另外一个程序,即使注释掉use sigtrap,仍然出现问题。
检查sigreturn函数手册,这是一个信号处理的函数,应用程序根本不应该调用。
一般perl写的程序都非常高级了,在什么情况下会反复进入信号处理函数呢?
作者:
xti9er
时间:
2010-02-22 15:25
上面兄弟都说过了,在人的逻辑错误的时候 会...
先看代码逻辑是否有问题吧,先暂且认为perl语句和函数 没问题
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2