应用程序背景时线程被杀死了吗?

时间:2017-09-26 23:28:01

标签: c++ multithreading c++14 fuse

我正在开发一个融合文件系统,在调用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

1 个答案:

答案 0 :(得分:2)

libfuse wiki

  

应该从init()方法启动杂项线程。在进程进入后台时,fuse_main()将退出之前启动的线程。