Skip to content
Snippets Groups Projects
Commit dc701378 authored by Emil Harlan's avatar Emil Harlan
Browse files

a

parent dfda6187
No related branches found
No related tags found
No related merge requests found
......@@ -4,6 +4,7 @@ from std_msgs.msg import String
import subprocess
import threading
import signal
import asyncio
class Launch_Node(Node):
def __init__(self):
......@@ -41,19 +42,26 @@ class Launch_Node(Node):
else:
self.get_logger().info(f"Command executed: {command}")
def kill_node(self, name):
async def kill_node(self, name):
if name in self.running_processes:
try:
process_handle = self.running_processes[name]
process_handle.send_signal(signal.SIGINT)
process_handle.wait(timeout=30)
except subprocess.TimeoutExpired:
process_handle.kill()
process_handle.wait()
self.get_logger().info(f"Node '{name}' killed.")
await self.wait_process_termination(process_handle)
except Exception as e:
self.get_logger().error(f"Failed to kill node '{name}': {e}")
else:
self.get_logger().info(f"Node '{name}' killed.")
else:
self.get_logger().info(f"No active node with name '{name}' to kill.")
async def wait_process_termination(self, process_handle):
try:
await asyncio.to_thread(process_handle.wait)
except subprocess.TimeoutExpired:
process_handle.kill()
await asyncio.to_thread(process_handle.wait)
def main(args=None):
rclpy.init(args=args)
node = Launch_Node()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment