我在我的代码中使用了pcntl扩展,如下所示:我将处理程序绑定到某个信号,例如SIGUSR1,并且有一个脚本将信号发送到我的应用程序。
pcntl_signal(SIGUSR1, function ($signo){
echo 'Signal:' . $signo . PHP_EOL;
});
我有这样的错误:
stream_get_contents(): Failure 'would block' (-9)
此外,我还有一个ssh执行远程命令的代码(函数的一部分):
$stream = ssh2_exec(
$this->connection,
$command,
$options['pty'],
$options['env'],
$options['width'],
$options['height'],
$options['width_height_type']
);
if ($options['waitOut']) {
stream_set_blocking($stream, true);
如果此处出现信号,将发生以下错误:“失败”将阻止'( - 9)“
$output = stream_get_contents($stream);
}
fclose($stream);
return $output;
有什么方法可以避免这种情况吗?
答案 0 :(得分:0)
嗯,stream_get_contents函数通常不能与unix信号一起使用。 我使用下一个代码而不是“stream_get_contents”
$finisher = "SSH_FINISHED_COMMAND";
$command .= " && echo \"{$finisher}\"";
$command = str_replace(' &&' , ' 2>&1 &&', $command);
$stream = ssh2_exec(
$this->connection,
$command,
$options['pty'],
$options['env'],
$options['width'],
$options['height'],
$options['width_height_type']
);
stream_set_blocking($stream, true);
$block = false;
$isFinished = false;
while (! feof($stream) && ! $isFinished){
$block = fread($stream, 256);
$output .= $block;
$isFinished = substr($output , -strlen($finisher)-2) == $finisher . '\n';
}
$output = str_replace($finisher . "\n", '', $output);
fclose($stream);
return $output;