[问题]请问shell如何判断一个进程是自动退出的还是人为终止的?

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
Nile
帖子: 990
注册时间: 2006-07-15 11:20
来自: 枫叶刀市
送出感谢: 2 次
接收感谢: 0

[问题]请问shell如何判断一个进程是自动退出的还是人为终止的?

#1

帖子 Nile » 2008-02-29 23:03

我在写一个用mplayer连续播放文件的shell,
问题是如何让shell区分
1, mplayer播放到文件结尾自动退出
2, 用户按q或esc退出程序
两种情况(都属于正常退出)?

请各位高手给点建议
thx!
Thinkpad T400
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
送出感谢: 0
接收感谢: 7 次
联系:

#2

帖子 BigSnake.NET » 2008-03-03 20:21

不可以
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

#3

帖子 eexpress » 2008-03-03 21:18

mp的输出,定向到你的shell。一直read,判断最后的文字?
试试吧。只是,mp不是支持列表的吗。
● 鸣学
cosechy
帖子: 82
注册时间: 2008-03-06 4:56
送出感谢: 0
接收感谢: 0
联系:

#4

帖子 cosechy » 2008-03-06 4:58

加个管道,用别的程序代替mplayer读键盘输入
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

#5

帖子 eexpress » 2008-03-06 13:22

mplayer /home/exp/媒体/◇事件声音-et/select.wav; echo $?
判断$?都可以的。判断什么键盘哦。
● 鸣学
chasye
帖子: 333
注册时间: 2007-05-13 15:20
送出感谢: 0
接收感谢: 0

#6

帖子 chasye » 2008-03-06 17:01

shell 中加入

_exit()
{
echo "some one kill me !!!"
exit 1
}
trap "_exit" 2 3 15
头像
Nile
帖子: 990
注册时间: 2006-07-15 11:20
来自: 枫叶刀市
送出感谢: 2 次
接收感谢: 0

#7

帖子 Nile » 2008-03-07 16:31

呵呵,按ee的思路作好了
eexpress 写了:mp的输出,定向到你的shell。一直read,判断最后的文字?
试试吧。只是,mp不是支持列表的吗。
只是感到mplayer的列表有点不够“智能”:D

播放时
mplayer -fs -quiet -sub-fuzziness 1 "$FileName" | tee /tmp/mpl_tmp
然后mplayer结束后用
if [ "`tail -1 /tmp/mpl_tmp`" = "Exiting... (Quit)" ]
判断就可以了。

PS:学校网速真慢到姥姥家了.... :x
Thinkpad T400
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

#8

帖子 eexpress » 2008-03-07 19:57

$?的,我试过,也可以的吧。你试试
● 鸣学
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
送出感谢: 0
接收感谢: 7 次
联系:

#9

帖子 BigSnake.NET » 2008-03-07 20:08

代码: 全选

autumncat@autumncat-host:~/qt
$ mplayer -really-quiet foo.mp3
mplayer: could not connect to socket
mplayer: No such file or directory
Exit status: 1
autumncat@autumncat-host:~/qt
$ mplayer -really-quiet foo.mp3
mplayer: could not connect to socket
mplayer: No such file or directory
Exit status: 0
autumncat@autumncat-host:~/qt
$ mplayer -really-quiet foo.mp3
mplayer: could not connect to socket
mplayer: No such file or directory
Exit status: 0
第一次是 pkill
第二次是 q
第三次是 自然播完
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

#10

帖子 eexpress » 2008-03-07 20:13

没文件的不对吧。
我理解楼主只是需要ctrl-c和完成2种状态。有其他的要求的,还是判断输出算了。
● 鸣学
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
送出感谢: 0
接收感谢: 7 次
联系:

#11

帖子 BigSnake.NET » 2008-03-07 20:15

eexpress 写了:没文件的不对吧。
我理解楼主只是需要ctrl-c和完成2种状态。有其他的要求的,还是判断输出算了。
ee根本没看清lz.. 他要的是区别 q 与 eof
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

#12

帖子 eexpress » 2008-03-07 20:19

那随便了。我想理解问题,并不局限于标题要求的。

球猫,赶紧出来,说明下今天ping通人了没。
● 鸣学
回复

回到 “Shell脚本”