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
この質問は不完全なようです... – Phil1970
無関係:なぜ動的に 'スレッド 'を割り当てるのですか?奇妙で恐らく無謀な選択と思われる。 – user4581301
私は、ヒューズが "forkとexit"を使ってデーモン化すると推測しています。これにより、新しいバックグラウンドプロセスが作成され、元のメインプロセスがそのスレッドとともに終了します。フォークが発生した後、子プロセスに必要なスレッドを作成するのが理想的です。残念ながら、私はヒューズの内部についてこれを行う方法を知っているだけでは十分ではありません。 – msandiford