gpt4 book ai didi

php - 长时间运行的 PHP 进程陷入循环 - 包括 strace 输出

转载 作者:IT王子 更新时间:2023-10-29 00:37:04 25 4
gpt4 key购买 nike

我有一个长时间运行的 PHP 进程,有时会卡在一个循环中。这是 strace 输出,但我不知道它是什么意思:

nanosleep({1, 0}, {1, 0})               = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigaction(SIGCHLD, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
nanosleep({1, 0}, {1, 0}) = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigaction(SIGCHLD, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
nanosleep({1, 0}, {1, 0}) = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigaction(SIGCHLD, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
nanosleep({1, 0}, <unfinished ...>

上面的调用无限循环,并且进程不会恢复。上面的调用是什么意思?

最佳答案

对不起,我之前的回答是错误的。它无限等待:

// Ignore SIGCHLD (Child process stopped or terminated)
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
// Set handler to SIGCHLD to default (i.e. ignore)
rt_sigaction(SIGCHLD, NULL, {SIG_DFL, [], 0}, 8) = 0
// Un-ignore SIGCHLD
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
// Sleep for a second
nanosleep({1, 0}, {1, 0}) = 0

我不知道为什么要在循环中安装信号处理程序,但这是由以下 php 代码引起的行为:

while (true) {
sleep(1);
}

我无法想象为什么您会在 php 中出于非调试目的调用 sleep ,因此请查找对 sleepusleeptime_nanosleep< 的任何调用.

关于php - 长时间运行的 PHP 进程陷入循环 - 包括 strace 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6316282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com