Bash

當 tmux 停止執行時,在後台使用命令啟動 tmux,而不停止所述命令

  • June 17, 2021

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

雖然這兩種方法(一個 usingpkillkill-sessionfrom tmux)乍一看似乎都有效,但我注意到與第一次嘗試這樣做相比,兩者都阻止了通過啟動的程序/腳本nohup後台(減去關於 stop 的部分tmux) .

我如何tmux(基於上面的範例)在會話中(在後台)啟動 shell 命令,分離它,然後tmux在 shell 命令仍在後台執行時完全停止?

PS:我確實檢查了thisthis post,但未能在那裡找到解決方案。

這看起來比我想像的要容易:

tmux new-session -A -s myprogramsession \; send -t myprogramsession "nohup /usr/bin/myscript.sh &>/dev/null &" ENTER \; detach -s myprogramsession && sleep 1 && pkill tmux

如果 asleep之前添加了這項工作pkill。但是可能不是最好的解決方案。

引用自:https://unix.stackexchange.com/questions/654691