我目前有一个 bash 脚本,可以启动我的 ros2 节点。这工作得很好。我现在尝试将脚本作为后台任务启动并将输出写入文件中。这样做时,我无法在以后终止节点。之前我通过在终端中点击
Ctrl + C
来终止它,所有节点都停止了。我尝试通过在启动脚本时保存 PID 然后终止它来执行相同的操作,但是节点仍在运行。
是否有可能停止脚本启动的所有节点?停止所有 ros2 节点是不可能的,因为我并行启动多个节点。
"./${SCRIPTFILE}" > $LOGFILE &
echo $! > $PIDFILE
kill -TERM $(cat $PIDFILE) 2> /dev/null
当您使用
kill -TERM $(cat $PIDFILE) 2> /dev/null
时,它会发送一个 SIGTERM,这更像是一种谨慎的方式来查看是否可以关闭而不危及打开的数据库或文件的完整性,但它可以被阻止或以其他方式处理。如果您想终止一个进程,无论其状态如何,请使用:
kill -9 -TERM $(cat $PIDFILE) 2> /dev/null