我有一个 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,但它不起作用。
你可能想试试这个:
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'"
显然,终止符不会以这种方式初始化它自己的 shell,一旦使用 -c 选项传递的命令结束,shell 就会终止,终止符会自动关闭窗口。
解决了。 无需使用"bash -c"。 'some_program'是一个ROS节点,所以我需要做的就是杀死rosmaster......
$ 基洛尔 -9 罗斯马斯特
它现在有效。