![在后台使用命令启动 tmux,当 tmux 停止运行时不停止该命令](https://linux22.com/image/15346/%E5%9C%A8%E5%90%8E%E5%8F%B0%E4%BD%BF%E7%94%A8%E5%91%BD%E4%BB%A4%E5%90%AF%E5%8A%A8%20tmux%EF%BC%8C%E5%BD%93%20tmux%20%E5%81%9C%E6%AD%A2%E8%BF%90%E8%A1%8C%E6%97%B6%E4%B8%8D%E5%81%9C%E6%AD%A2%E8%AF%A5%E5%91%BD%E4%BB%A4.png)
所以,我想通过 tmux 启动一个 shell 命令,但在后台并与所述 tmux 会话分离......所以我这样做:
tmux new-session -A -s myprogramsession \; send -t myprogramsession "nohup /usr/bin/myscript.sh &>/dev/null &" ENTER \; detach -s myprogramsession
这有效。但现在,如果我想让 tmux 在与上述会话分离后停止,我需要执行以下操作:
这:
tmux new-session -A -s myprogramsession \; send -t myprogramsession "nohup /usr/bin/myscript.sh &>/dev/null &" ENTER \; detach -s myprogramsession \; kill-session -t myprogramsession
或这个:
tmux new-session -A -s myprogramsession \; send -t myprogramsession "nohup /usr/bin/myscript.sh &>/dev/null &" ENTER \; detach -s myprogramsession && pkill tmux
虽然这两种方法(一种使用pkill
和kill-session
from tmux
)乍一看似乎都有效,但我注意到两者都阻止了通过nohup
from启动的进程/脚本停留在后台,与设法做到这一点的第一次尝试相比(减去有关停止的部分tmux
)。
我怎样才能tmux
(基于上面的示例)在会话上(在后台)启动 shell 命令,将其分离,然后tmux
在 shell 命令仍在后台运行时完全停止?
答案1
这看起来比我想象的要容易:
tmux new-session -A -s myprogramsession \; send -t myprogramsession "nohup /usr/bin/myscript.sh &>/dev/null &" ENTER \; detach -s myprogramsession && sleep 1 && pkill tmux
sleep
如果在进来之前添加a ,那么这项工作就可以工作pkill
。但是,可能不是最好的解决方案。