Ctrl-C 含有fast dds的进程不退出
代码这样写:
if (participant_) {
participant_->delete_contained_entities();
eprosima::fastdds::dds::DomainParticipantFactory::get_instance()->delete_participant(participant_);
}
调用delete_contained_entities会出现shm watchdog线程没有退出

后面我挨个删除实体,并且反注册类型,最终没有再出现ctrl-c进程无法退出的问题。
代码这样的:
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_);
}
这个时候进程就能退出了。
有待进一步分析。