我正在开发一个融合文件系统,在调用fuse_main_real()
之前,我在类实例中启动std::thread
来完成一些后台工作。
this->t_receive = new std::thread([this] { this->receive(); });
然而,在进入后台时似乎fuse_main_real()
杀死了这个帖子
如果我使用-f
选项启动程序,该选项告诉保险丝保持在前台,问题不会发生并且线程仍然存在。
我不确定进入后台的保险丝是什么。
如何使我的线程能够在后台运行?
编辑:这是揭露问题的基本示例:
#define FUSE_USE_VERSION 30
#include <iostream>
#include <thread>
#include <fuse.h>
static void thread_method()
{
while (true)
{
std::cout << "test" << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(1));
}
}
struct testop : fuse_operations
{ };
static struct testop ops;
int main(int argc, char** argv)
{
std::thread(thread_method).detach();
fuse_main_real(argc, argv, &ops, sizeof(fuse_operations), NULL);
}
使用
进行编译g++ -D_FILE_OFFSET_BITS=64 `pkg-config --cflags fuse` -lfuse -lpthread -std=c++14 -o test.o test.cpp
有效的命令(反复说&#34;测试&#34;):
./test.o -f /home/test/testmountpoint
不起作用的命令并显示问题(说&#34;测试&#34;一次):
./test.o /home/test/testmountpoint