
关于程序异常返回值的疑问
-
- 帖子: 294
- 注册时间: 2007-06-02 20:00
关于程序异常返回值的疑问
最近用到timeout这个命令,需要判断执行的进程是因为超时退出还是异常退出。根据man手册上说timeout如果因为超时退出,返回124,否则返回timeout检测的程序状态。那万一程序自身异常退出返回124怎么办,有这种可能吗??进程异常退出的值有规律可循吗。谢谢各位大神。 

- astolia
- 论坛版主
- 帖子: 6703
- 注册时间: 2008-09-18 13:11
Re: 关于程序异常返回值的疑问
完全有可能。进程退出码是由程序自身,或者说是程序作者决定的。具体可以去看man或者查源码。
如果实在拿不准,你可以写一个保证不会返回124的中间程序,用timeout执行这个中间程序,再由中间程序去执行实际的程序,并把退出码以某种方式告知给上层脚本就行了
举个例子,这是会以124退出的a.sh
直接 timeout 1 a.sh后,"$?"是124没法分辨
弄个像这样的 proxy.sh
实际使用像这样
如果实在拿不准,你可以写一个保证不会返回124的中间程序,用timeout执行这个中间程序,再由中间程序去执行实际的程序,并把退出码以某种方式告知给上层脚本就行了
举个例子,这是会以124退出的a.sh
代码: 全选
#!/bin/bash -
exit 124
弄个像这样的 proxy.sh
代码: 全选
#!/bin/bash -
"$@"
echo "$?" > /tmp/exitcode
exit 0
代码: 全选
timeout 1 proxy.sh a.sh
isTimeout=`test "$?" -eq 124`
exitCode=`cat /tmp/exitcode`
- astolia
- 论坛版主
- 帖子: 6703
- 注册时间: 2008-09-18 13:11
Re: 关于程序异常返回值的疑问
顺便说一下,timeout命令完整的退出码说明要用info timeout查看,不仅仅是124,还有其他一些
Exit status:
124 if COMMAND times out
125 if `timeout' itself fails
126 if COMMAND is found but cannot be invoked
127 if COMMAND cannot be found
137 if COMMAND is sent the KILL(9) signal (128+9)
the exit status of COMMAND otherwise
Exit status:
124 if COMMAND times out
125 if `timeout' itself fails
126 if COMMAND is found but cannot be invoked
127 if COMMAND cannot be found
137 if COMMAND is sent the KILL(9) signal (128+9)
the exit status of COMMAND otherwise