# Ctrl-C 含有fast dds的进程不退出 代码这样写: ```cpp if (participant_) { participant_->delete_contained_entities(); eprosima::fastdds::dds::DomainParticipantFactory::get_instance()->delete_participant(participant_); } ``` 调用delete_contained_entities会出现shm watchdog线程没有退出 ![image](image.png) 后面我挨个删除实体,并且反注册类型,最终没有再出现ctrl-c进程无法退出的问题。 代码这样的: ```cpp if (participant_) { // 删除sub相关的实体 for (auto &[ignore, reader] : msg_sub_) { if (reader.valid) { // 先删除 datareader // reader.subscriber->delete_datareader(reader.reader); reader.subscriber->delete_contained_entities(); // 再删除 listener delete reader.listener; // 最后是 subscriber participant_->delete_subscriber(reader.subscriber); reader.valid = false; } } // 删除pub相关的实体 for (auto &[ignore, writer] : msg_pub_) { if (writer.valid) { // 先删除 datawriter // writer.publisher->delete_datawriter(writer.writer); writer.publisher->delete_contained_entities(); // 再删除 listener delete writer.listener; // 最后是 publisher participant_->delete_publisher(writer.publisher); writer.valid = false; } } // 反注册 type for (auto &type_name : reg_type_names_) { participant_->unregister_type(type_name); } participant_->delete_contained_entities(); eprosima::fastdds::dds::DomainParticipantFactory::get_instance()->delete_participant(participant_); } ``` 这个时候进程就能退出了。 有待进一步分析。