Functional difference? pkill vs. rosnode kill
I'm just curious if there's a preferred way to kill a node or if it's all the same underneath.
I'm just curious if there's a preferred way to kill a node or if it's all the same underneath.
pkill
is an OS utility that uses OS infrastructure to forcibly terminate the process that is your node. The node gets notified that this is going to happen via various signals), which it can use to perform pre-shutdown operations. See also pkill(1).
rosnode kill
will use the XML-RPC server in each node to send it (something akin to) a service request (shutdown(..)
, see ROS/Slave_API) that will set some client-lib internal variable(s) that eventually cause it exit any while(ros::ok()) { .. }
or ros::spin()
loops. The node may then perform any cleanup actions it has defined.
I'm just curious if there's a preferred way to kill a node or if it's all the same underneath.
No, it's not the same, and I would say it is probably nicer to use rosnode kill
, as the signals that pkill
uses may not make it to the process hosting your node, but even if they do, they may not give your node (and the middleware infrastructure running in the same process) enough time to gracefully shut down.
Please start posting anonymously - your entry will be published after you log in or create a new account.
Asked: 2017-10-28 19:57:14 -0500
Seen: 525 times
Last updated: Oct 29 '17
Kill a Respawning Node (with pkill?)
Kill python nodes in ROS2 Galactic
ROS master unexpectedly kills without error (when using custom launch file)
rosout keeps respawning even after killall
How to kill nodes in launch file after 10 seconds
killing a rosrun process using python script
Weird rqt_graph when running turtlesim