国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

關(guān)于信號(hào)中斷 wait 系統(tǒng)調(diào)用的問(wèn)題

phpcreeper

問(wèn)題重現(xiàn):
原帖子:http://wenda.workerman.net/?/question/883
walkor大大在回復(fù)中有這么一段話:
【pcntl_wait其實(shí)就是wait系統(tǒng)調(diào)用,是可以被信號(hào)打斷的,當(dāng)信號(hào)到來(lái)后pcntl_wait會(huì)立刻返回。
同理sleep也是系統(tǒng)調(diào)用,也可以被信號(hào)打斷停止睡眠立刻返回。所以在pcntl_wait或者sleep下的pcntl_signal_dispatch函數(shù)在收到信號(hào)后會(huì)立刻被執(zhí)行】

問(wèn)題調(diào)試:
詳見(jiàn)附件兩副截圖

[attach]1217[/attach]

[attach]1218[/attach]

測(cè)試結(jié)果:
信號(hào)確實(shí)會(huì)中斷 sleep 系統(tǒng)調(diào)用,但是并未中斷 wait 系統(tǒng)調(diào)用。

期望結(jié)果:
期望結(jié)果如walkor大大所言那樣。

5003 6 0
6個(gè)回答

walkor 打賞

一次信號(hào)只中斷一個(gè)系統(tǒng)調(diào)用,并且只中斷正在阻塞的系統(tǒng)調(diào)用,其它還沒(méi)執(zhí)行到的不會(huì)影響

  • 暫無(wú)評(píng)論
phpcreeper

凹, 事實(shí)上我單獨(dú)做過(guò)針對(duì)沒(méi)有 sleep 系統(tǒng)調(diào)用的調(diào)試【即注釋圖中13-14行代碼】, 也就是說(shuō)只測(cè)試信號(hào)對(duì)單獨(dú) pcntl_wait 調(diào)用的影響,運(yùn)行以后也無(wú)法中斷wait調(diào)用呢。

  • 暫無(wú)評(píng)論
walkor 打賞
<?php
    pcntl_signal(SIGINT, function(){echo "get signal\n";});
    $pid = pcntl_fork();

    if ($pid) {
        pcntl_wait($status, WUNTRACED);
        echo "pcntl_wait return\n";
    } else {
        sleep(1000);
    }

我這測(cè)試是正常的

  • 暫無(wú)評(píng)論
phpcreeper

嗯,把你的代碼和我的代碼都調(diào)試了一遍, 似乎發(fā)現(xiàn)問(wèn)題的癥結(jié)了:

測(cè)試時(shí)一直是終端直接發(fā)送 kill -2 pid 信號(hào)指令 --> 發(fā)現(xiàn)無(wú)法中斷系統(tǒng)調(diào)用
剛我順手用了 CTRL + C 指令 --> 發(fā)現(xiàn)能夠正常中斷系統(tǒng)調(diào)用
CTRL + C 和 kill -2 pid 按理說(shuō)一樣的啊,這是為什么呢?

  • 暫無(wú)評(píng)論
phpcreeper

@walkor 感謝,經(jīng)調(diào)試,已經(jīng)達(dá)到如你所說(shuō)的預(yù)期效果,strace跟蹤了下,發(fā)現(xiàn)我提供的DEMO代碼存在問(wèn)題,即:
pcntl_signal ( int signo, callback handle ) 最后一個(gè)參數(shù)忘記需要設(shè)置為false

  • 暫無(wú)評(píng)論
walkor 打賞

好的

  • 暫無(wú)評(píng)論
年代過(guò)于久遠(yuǎn),無(wú)法發(fā)表回答
??