我有一个通过 ssh 连接到外部机器的终端,并且有一个进程在其中运行。 是否可以将执行移至后台,以便我可以关闭 ssh 连接而无需终止它?如果是的话怎么办?
按control + Z,这将暂停它并将其发送到后台。然后输入
bg
继续在后台运行。
或者,在命令末尾添加
&
以从一开始就在后台运行它。
这只会让它在后台运行,一旦你注销它仍然会被杀死。为了在注销后保持其运行,您需要使用
disown -h
“否认”该进程,以便 shell 不会将其计入需要在注销时杀死的进程中。请参阅这篇文章了解更多详情。
您也可以使用“screen”命令,一旦您与它分离,该命令将继续运行其中的进程。
@lizuki 以下是来自
screen
帮助页面的一些基本 tldr
命令:
- Show open screen sessions:
screen -ls
- Start a new named screen session:
screen -S session_name
- Reattach to an open screen:
screen -r session_name
- Detach from inside a screen:
<Ctrl> + A, D
- Kill the current screen session:
<Ctrl> + A, K
有用:即使分离,也可以将文本发送到屏幕(5.0.0 版本除外,它会返回缓冲区溢出):
screen -S <session_name> -X stuff <text>
例如,发送“ls -l”到屏幕 s1:
screen -S s1 -X stuff "ls -l\n"
此处
\n
在末尾添加换行符,在命令后按 Enter 键有效。
当我们在这里时,我不妨为
tmux
做同样的事情。
再次,来自其 tmux
页面的一些基本 tldr
命令:
- Start a new session:
tmux
- Start a new named session:
tmux new -s name
- List existing sessions:
tmux ls
- Attach to the most recently used session:
tmux attach
- Detach from the current session (inside a tmux session):
<Ctrl>-B d
- Create a new window (inside a tmux session):
<Ctrl>-B c
- Switch between sessions and windows (inside a tmux session):
<Ctrl>-B w
一些更酷的命令:
- Attach a specific session:
tmux attach -t <session_name>
- Split the session vertically:
<Ctrl>-B %
- Split the session horizontally:
<Ctrl>-B "
- Send text to a session, even if detached:
tmux send -t <session_name> <text>
- Send command to a session, even if detached:
tmux send -t <session_name> <command> ENTER
tmux send -t s1 "ls -l" ENTER
最后,
tmux
会自动完成部分命令。例如,而不是使用
tmux attach-session -t <session_name>
你可以像这样缩短它:
tmux attach -t <session_name>
tmux a -t <session_name>
当然,他们的手册页上还有更多信息。