我有一个udev规则,只要插入某个USB设备,该规则就会调用脚本。该脚本使用以下命令启动终端:
terminator -e "...some_program" & exit
(也可能是xterm,据我所知无关紧要。)
一旦“ some_program”完成应做的操作,它就会退出(从该程序内部,而不是bash中),但是终结器终端保持打开状态,除非我 Ctrl + C 它,在这种情况下它将关闭。但是我不想 Ctrl + C ,这就是重点。
我还有另一个udev规则,该规则会在USB设备被卸下时运行。但是直到从终端打开的终端才触发该规则
“插入USB规则”关闭(即使我从“插入USB规则”启动脚本后使用了& exit
)
我没有更多的想法了,我在寻找解决方案的高潮和低潮。但没有任何效果。
我尝试从some_program内部发送SIGINT而不是使用exit(1),但它不起作用。程序终止,但是终端保持打开状态。
我尝试通过获取终端的PID并杀死它来杀死该终端。没用。
我尝试打开另一个终端并从那里杀死PID,但没有成功。
答案 0 :(得分:0)
您可能想尝试一下:
terminator -e "bash -c 'yourcommand'"
至少当我以这种方式致电ls时,它会自动关闭:
# this closes automatically:
terminator -e "bash -c 'ls'"
# to test, this closes when the less command is ended (eg. by hitting q):
terminator -e "bash -c 'ls | less'"
显然,终结者并不会以这种方式初始化自己的外壳,并且在通过-c选项传递的命令结束时,外壳会终止,终结器会自动关闭窗口。
答案 1 :(得分:0)
解决了。无需使用“ bash -c”。 “ some_program”是一个ROS节点,所以我要做的就是杀死rosmaster ...
$ killall -9 rosmaster
它现在可以工作。