为什么从 write() 调用 __kernel_vsyscall() 永远不会返回
Why would call to __kernel_vsyscall() from write() never return?
我的C++程序挂起,我将其附加到调试器并找到此堆栈跟踪,零帧永远不会完成。 这里可能出现的问题是什么?如果可以收集更多信息,我仍然在调试器中保留它。还有其他线程。
#0 0xffffe410 in __kernel_vsyscall ()
#1 0x0083929b in write () from /lib/libc.so.6
#2 0x007d9cd4 in _IO_new_file_write () from /lib/libc.so.6
#3 0x007d9995 in new_do_write () from /lib/libc.so.6
#4 0x007d9c7f in _IO_new_do_write () from /lib/libc.so.6
#5 0x007da56e in _IO_new_file_overflow () from /lib/libc.so.6
#6 0x007d9b6c in _IO_new_file_xsputn () from /lib/libc.so.6
#7 0x007d012f in fwrite () from /lib/libc.so.6
#8 0x009a96f6 in ?? () from /usr/lib/libstdc++.so.6
#9 0x009ac66b in std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) () from /usr/lib/libstdc++.so.6
#10 0x0822aa2c in printErrorMsg (format=0x848675f "#%2i %s: %s(...) %s [%p]n") at myAssert.cpp:66
帧 10 的源代码是:
void
printErrorMsg(const char *format, ...)
{
va_list ap;
const int size = 4096;
char buffer[size];
va_start(ap, format);
vsnprintf(buffer, size, format, ap);
va_end(ap);
std::clog << buffer;
std::cout << buffer; // Code is hung here in frame 10.
}
代码正在尝试打印堆栈跟踪。
问题似乎是,如果 fork()ed 子进程的父进程是通过 ssh 调用的,并且启动它的 ssh 连接已退出,则 fork() 子进程没有有效的 cout。
解决方案是在召唤过程退出后停止使用 cout。 堵塞工作正常,因为它将进入由 fork() ed子进程设置的日志文件。
相关文章:
- 为什么是谷神星协方差.计算()似乎永远运行而不返回?
- 密码登录程序将永远循环并显示不正确的结果
- 我想在C++中读取一些多个字符,但它永远不会读取第二个字符
- SFML 碰撞永远不会在我的系统中注册
- 先进先出:一个进程永远不会从管道读取
- 移动构造函数永远不会被调用
- 程序永远不会进入虚拟析构函数
- 在 *.cpp 文件中实现的 c++ 函数/方法永远不会内联扩展吗?
- 指针永远不会在链表深层复制构造函数中达到 null
- 为什么我的 while 循环永远不会在 C++ 中的数字猜测游戏中结束?
- 类似函数的宏参数名称替换是否保证永远不会发生?
- curl_slist->next 永远不会为空,因此当循环卡住时
- 我应该使用无符号字符而不是 int 来存储永远不会大于 255 的值吗?
- cudaMemcpyToSymbol只是挂起,永远不会返回.GPU 处理速度为 100%.代码在 K40 上工作正常,但
- 暂停功能,它永远循环
- 字符串迭代器永远不会达到 std::string::end()
- C++多线程应用程序将永远挂起
- Linux 从永远在线的应用程序中创建和删除文件
- 为什么我的线程永远不会结束
- 无法从串行端口读取.WaitCommEvent() 永远不会返回