Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
长时间运行的PHP进程卡在循环中-包含strace输出_Php_C_Linux_Strace - Fatal编程技术网

长时间运行的PHP进程卡在循环中-包含strace输出

长时间运行的PHP进程卡在循环中-包含strace输出,php,c,linux,strace,Php,C,Linux,Strace,我有一个长时间运行的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({

我有一个长时间运行的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 ...>
nanosleep({1,0},{1,0})=0
rt_sigprocmask(SIG_块,[CHLD],[8)=0
rt_sigaction(SIGCHLD,NULL,{SIG_DFL,[],0},8)=0
rt_sigprocmask(SIG_SETMASK,[],NULL,8)=0
奈米睡眠({1,0},{1,0})=0
rt_sigprocmask(SIG_块,[CHLD],[8)=0
rt_sigaction(SIGCHLD,NULL,{SIG_DFL,[],0},8)=0
rt_sigprocmask(SIG_SETMASK,[],NULL,8)=0
奈米睡眠({1,0},{1,0})=0
rt_sigprocmask(SIG_块,[CHLD],[8)=0
rt_sigaction(SIGCHLD,NULL,{SIG_DFL,[],0},8)=0
rt_sigprocmask(SIG_SETMASK,[],NULL,8)=0
纳米睡眠({1,0},

上面的调用无限期地循环,进程无法恢复。上面的调用是什么意思?

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

// 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,所以请查看
sleep
usleep
time\u nanosleep

的任何调用,从这一点很难判断,你能发布一些挂起的php代码吗?这是一个1700行的过程代码,我希望strace的输出是正确的翻译后,我可以理解php可以匹配什么函数。更新。
sleep
usleep
,或
time\u nanosleep
可能是关键词。@gAMBOOKa如果法律允许,你能详细说明一下为什么一些php代码在循环中调用
sleep
?(仅针对我的常见或不太常见的编程错误的非正式列表,如果您不介意,也不太复杂)
while(!$running){doYourThing();sleep(1);}
-
$running在完成执行并准备重新开始时,由
doYourThing
设置为
false