Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.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
C++ std::of流构造函数阻塞_C++_Linux_Gcc_Gdb_Centos - Fatal编程技术网

C++ std::of流构造函数阻塞

C++ std::of流构造函数阻塞,c++,linux,gcc,gdb,centos,C++,Linux,Gcc,Gdb,Centos,我有以下代码: std::ofstream stat("/opt/lic_status"); if ( stat.is_open() ) { stat << ver; stat.close(); } std::of Stream stat(“/opt/lic_status”); 如果(状态为打开()) { 斯达 “我需要指出的是,我不知道当时的状态是什么 /opt/lic_status文件。我不知道它是由其他进程打开的,还是根本不存在。” 根据我的理解,文件的上述属

我有以下代码:

std::ofstream stat("/opt/lic_status");
if ( stat.is_open() )
{
    stat << ver;
    stat.close();
}
std::of Stream stat(“/opt/lic_status”);
如果(状态为打开())
{
斯达
“我需要指出的是,我不知道当时的状态是什么
/opt/lic_status文件。我不知道它是由其他进程打开的,还是根本不存在。”

根据我的理解,文件的上述属性/状态都不能导致程序在该特定行上阻塞(.e.即用户模式程序在
std::of stream
构造函数内调用
open()
)。每当用户模式程序调用
open()时
系统调用打开文件时,系统将使用适当的错误代码完成调用。系统(内核模式)不会返回到用户模式

有没有人对造成这种情况的原因有任何建议?我 只有coredump,我能从中得到任何信息吗

  • 整个系统(内核)未处于良好状态(由于未知原因)
  • 程序是多线程的,其他一些线程被卡在了某个地方。通过查看此线程的调用堆栈,当它在内核模式下执行并调用
    open()
  • 如果我们遇到第一种情况,那么我相信我们不能做太多,程序的核心转储文件不会提供任何额外信息来识别/确认这一点。核心转储文件只包含该特定进程的快照

    然而,如果我们是第二种情况,那么我们应该尝试进一步分析核心转储文件

    $info threads
    $thread apply all backtrace
    

    上面的命令将提供信息(如果您的程序是多线程的)以及调用所有线程的堆栈。这可能有助于理解您的问题。如果您已经这样做了,您可以忽略上面的信息。

    您可以重现问题吗?我不这么认为。如果我可以重现它,我可以得到什么信息?谢谢您的回答。事实上,我还有其他线程(大约40个),并且大多数线程都被阻塞了(如预期的那样)。另一个线程的状态如何影响open()系统调用的行为?现在我们在两台不同的机器上两次解决了完全相同的问题。这可能是内核问题吗?根据我的理解,应该是用户模式程序问题(而不是内核问题)。您应该尝试分析其他线程的调用堆栈,并仔细理解它们。理想情况下,没有线程能够影响您的open()系统调用线程,这可能是其他线程状态的受害者。最终您必须弄清楚:)。最好的。这也可能是内核级的问题。但在这种情况下,其他一些程序(除了当前的)或整个系统应该会很慢……这也是我根据自己的理解和经验做出的猜测。
    $info threads
    $thread apply all backtrace