2017-09-26 7 views
3

私はヒューズファイルシステムを開発しています。fuse_main_real()を呼び出す前に、クラスインスタンスでstd::threadを起動しています。バックグラウンドに行くときアプリケーションがバックグラウンドのときにスレッドが終了しますか?

this->t_receive = new std::thread([this] { this->receive(); }); 

しかし、それはこのスレッドfuse_main_real()キルのように思えます。
fuseがフォアグラウンドに留まるように指示する、-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 

コマンド(繰り返し "テストは" と言う)を持つ:

./test.o -f /home/test/testmountpoint 

有効ではないコマンドt彼の問題は( "テスト" 一回言います):

./test.o /home/test/testmountpoint 
+1

この質問は不完全なようです... – Phil1970

+0

無関係:なぜ動的に 'スレッド 'を割り当てるのですか?奇妙で恐らく無謀な選択と思われる。 – user4581301

+1

私は、ヒューズが "forkとexit"を使ってデーモン化すると推測しています。これにより、新しいバックグラウンドプロセスが作成され、元のメインプロセスがそのスレッドとともに終了します。フォークが発生した後、子プロセスに必要なスレッドを作成するのが理想的です。残念ながら、私はヒューズの内部についてこれを行う方法を知っているだけでは十分ではありません。 – msandiford

答えて

2

libfuse wiki

その他のスレッドはinit()メソッドから開始されるべきであると述べています。プロセスがバックグラウンドになると、fuse_main()が終了する前に開始されたスレッドが終了します。

関連する問題