問題重現(xiàn):
原帖子:http://wenda.workerman.net/?/question/883
walkor大大在回復(fù)中有這么一段話:
【pcntl_wait其實就是wait系統(tǒng)調(diào)用,是可以被信號打斷的,當信號到來后pcntl_wait會立刻返回。
同理sleep也是系統(tǒng)調(diào)用,也可以被信號打斷停止睡眠立刻返回。所以在pcntl_wait或者sleep下的pcntl_signal_dispatch函數(shù)在收到信號后會立刻被執(zhí)行】
問題調(diào)試:
詳見附件兩副截圖
[attach]1217[/attach]
[attach]1218[/attach]
測試結(jié)果:
信號確實會中斷 sleep 系統(tǒng)調(diào)用,但是并未中斷 wait 系統(tǒng)調(diào)用。
期望結(jié)果:
期望結(jié)果如walkor大大所言那樣。
凹, 事實上我單獨做過針對沒有 sleep 系統(tǒng)調(diào)用的調(diào)試【即注釋圖中13-14行代碼】, 也就是說只測試信號對單獨 pcntl_wait 調(diào)用的影響,運行以后也無法中斷wait調(diào)用呢。
嗯,把你的代碼和我的代碼都調(diào)試了一遍, 似乎發(fā)現(xiàn)問題的癥結(jié)了:
測試時一直是終端直接發(fā)送 kill -2 pid 信號指令 --> 發(fā)現(xiàn)無法中斷系統(tǒng)調(diào)用
剛我順手用了 CTRL + C 指令 --> 發(fā)現(xiàn)能夠正常中斷系統(tǒng)調(diào)用
CTRL + C 和 kill -2 pid 按理說一樣的啊,這是為什么呢?
@walkor 感謝,經(jīng)調(diào)試,已經(jīng)達到如你所說的預(yù)期效果,strace跟蹤了下,發(fā)現(xiàn)我提供的DEMO代碼存在問題,即:
pcntl_signal ( int signo, callback handle ) 最后一個參數(shù)忘記需要設(shè)置為false