3
퓨즈 파일 시스템을 개발 중이며 fuse_main_real()
을 호출하기 전에 클래스 인스턴스에서 std::thread
을 시작하여 배경 작업을 수행합니다.응용 프로그램에 백그라운드가 있으면 스레드가 종료됩니까?
this->t_receive = new std::thread([this] { this->receive(); });
그러나 배경으로 들어가면 fuse_main_real()
은이 스레드를 죽입니다.
fuse가 포 그라운드에 있다고 알려주는 -f
옵션으로 프로그램을 시작하면 문제가 발생하지 않고 스레드가 남아 있습니다.
퓨즈가 배경으로 들어가는 것은 확실하지 않습니다.
내 스레드가 백그라운드에서 살아남도록하려면 어떻게해야합니까?
편집 :
./test.o -f /home/test/testmountpoint
: (반복 "테스트"라는) 작동
g++ -D_FILE_OFFSET_BITS=64 `pkg-config --cflags fuse` -lfuse -lpthread -std=c++14 -o test.o test.cpp
명령과
#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);
}
컴파일 : 여기에 문제를 노출하는 기본 예제
작동하지 않고 명령을 보여주는 명령 그는 문제 (라고 한 번 "테스트") :
./test.o /home/test/testmountpoint
그 질문은 불완전한 것처럼 보입니다 ... – Phil1970
관련 없음 : 왜 동적으로'스레드 '를 할당합니까? 이상하고 무모한 선택 인 것 같습니다. – user4581301
나는 퓨즈가 "포크와 출구"를 사용하여 데몬 화한다고 추측하고 있습니다. 이로 인해 새 백그라운드 프로세스가 생성되고 원래의 주 프로세스가 스레드와 함께 종료됩니다. 포크가 발생한 후에 자식 프로세스에 필요한 스레드를 만드는 것이 이상적입니다. 불행히도 나는 이것을 수행하는 방법을 알기 위해 퓨즈 내부에 대해 충분히 알지 못합니다. – msandiford