Odin Rqtclose -

sudo strace -p <PID> -e trace=network If you see repeated poll or recvfrom calls without returning, the GUI is waiting for a dead ROS topic. Before closing rqt , run:

rqt --force-discover --close-with-master The --close-with-master flag ensures rqt exits if the ROS master dies, preventing hangs. Outdated python-qt-binding or ros-kinetic-rqt-gui (or Melodic/Noetic) can cause shutdown deadlocks. Update: odin rqtclose

import rospy from python_qt_binding.QtCore import QTimer class OdinRqtPlugin: def (self, context): self._node = rospy.init_node('odin_rqt', anonymous=True) self._timer = QTimer() self._timer.timeout.connect(self._spin_ros) self._timer.start(10) # Process ROS events every 10ms sudo strace -p &lt;PID&gt; -e trace=network If you

<node name="odin_gui" pkg="odin_viz" type="odin_rqt.py" /> Check odin_rqt.py for any custom signal handling. Specifically, search for: Update: import rospy from python_qt_binding

def shutdown_plugin(self): rospy.loginfo("odin rqtclose: Starting shutdown sequence") # Disconnect callbacks self.pub.unregister() rospy.loginfo("odin rqtclose: Publishers unregistered") # Call parent super().shutdown_plugin() rospy.loginfo("odin rqtclose: Complete") If you see the first log but not the last, you’ve found a hang. Attach strace to the stuck rqt process (find PID via ps aux | grep rqt ):

rosnode list After rqtclose fails, run again. If the rqt node still appears, it’s still alive. Force-kill it:

#!/bin/bash # odin – correct wrapper for rqt rqt_pid="" function cleanup if [[ -n "$rqt_pid" ]]; then kill -TERM "$rqt_pid" wait "$rqt_pid" echo "odin rqtclose: clean exit" fi

LEAVE A REPLY

Please enter your comment!
Please enter your name here