作者TKyo (暗黑贵公子)
看板PttCurrent
标题Re: [请益] 连线异常中断後的处理
时间Mon Dec 19 06:48:03 2005
※ 引述《CCHptt (CCH)》之铭言:
: 如果一个使用者的 连线逾时 或 使用者直接将BBS浏览程式关闭, 在BBS伺服器中提供该
: 使用者服务的 process 是如何结束的? 是收到 termination signal 吗?
连线逾时 :
PTT 我看不出来, 因为也没有 "永久挂站" 的权限 @@
而 Maple 则是直接呼叫 abort_bbs()
而使用者直接将BBS浏览程式关闭则是送出 SIGTERM 给系统
如果是使用者直接关机的话, 则不会送出 SIGTERM 给系统
: 如果答案是 "是" 的话, 我可以先保存原来的 signal handler, 注册自己的 signal
: handler, 处理完之後再恢复原来的 signal handler, 最後再送 SIG_TERM 给自己吗?
SIG_TERM (Terminate): 是程式中断时发送给系统的讯号, 而非系统发出的讯号
而 PTT 系统则是侦测 SIGHUP/SIGTERM/SIGPIPE 三种讯号时, 会呼叫 abort_bbs()
SIGHUP (Hangup):
terminal hangup detect or death of controlling process
ex. kill -HUP pid
不过现在的 deamon 都惯用 SIGHUP(1) 来告诉自己重新 reload 设定
SIGPIPE (Pipe):
当程式写入 no reader 的 socket 或 fifo, 此动作则会产生 SIGPIPE讯号
(常见错误讯息为 Broken pipe)
※ 引述《in2 (敬请期待 :P)》之铭言:
: 我以为应该是 read(socket) 的时候拿到 -1 @_@
-1 应该是 select 逾时的情况, 何时逾时则是端看 vio_to 设定 (io.c:add_io())
且 (errno != EINTR) 的条件同时成立时, 才会 abort_bbs()
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.67.4.232
1F:推 uiLtreblA:应该是 abort_bbs() 12/19 16:36
2F:推 VictorHsieh:ptt 连线逾时是用外部程式做的 (kill SIGTERM) 12/20 00:02
3F:→ TKyo:对, 是 abort_bbs, 很顺地一连串 cp 下来 @@ 12/20 02:29
※ 编辑: TKyo 来自: 61.67.4.232 (12/20 02:30)