所以,我想通过 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
。但是,可能不是最好的解决方案。