Linux终端中&符号作用是什么?ROS场景下后台进程如何关闭?
命令
roscore& rviz 的运行逻辑 这是Linux Shell自带的后台任务语法:
&符号的作用是将其前方的命令对应的进程丢到当前终端的后台运行,Shell不会等待该进程执行完成,就会直接执行后续的命令- 执行
roscore& rviz时,Shell会先启动roscore进程并放到后台,紧接着就启动rviz进程放到前台占用当前终端的输入输出,等效于你开两个终端分别运行两个命令的效果。
按下Ctrl+C仅关闭rviz的原因
Ctrl+C 触发的SIGINT中断信号,只会发送给当前终端的前台运行进程:
- 执行完上述命令后,只有rviz是前台进程,roscore运行在后台收不到该中断信号,所以只会终止rviz,roscore会继续在后台保留运行。
关闭后台运行的roscore的方法
你可以根据当前操作场景选对应的方案:
- 如果执行
roscore& rviz的终端还未关闭:- 执行
jobs命令,查看当前终端的后台任务列表,会显示roscore对应的任务编号(通常为[1]) - 执行
kill %任务编号即可终止,比如任务编号是1就运行kill %1
- 执行
- 如果终端已经关闭,找不到对应后台任务:
直接执行killall roscore或者pkill roscore,全局匹配roscore进程并终止 - 如果要一次性清理所有残留的ROS进程:
执行rosnode kill -a,会终止所有运行中的ROS节点,包括roscore、rosout等核心进程。
内容的提问来源于stack exchange,提问作者Emilio7773
相关产品推荐
相关产品推荐

