在后台使用命令启动 tmux,当 tmux 停止运行时不停止该命令

在后台使用命令启动 tmux,当 tmux 停止运行时不停止该命令

所以,我想通过 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

虽然这两种方法(一种使用pkillkill-sessionfrom tmux)乍一看似乎都有效,但我注意到两者都阻止了通过nohupfrom启动的进程/脚本停留在后台,与设法做到这一点的第一次尝试相比(减去有关停止的部分tmux)。

我怎样才能tmux(基于上面的示例)在会话上(在后台)启动 shell 命令,将其分离,然后tmux在 shell 命令仍在后台运行时完全停止?

PS:我确实查过了帖子,但未能在那里找到解决方案。

答案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。但是,可能不是最好的解决方案。

相关内容