如何将正在运行的进程移动到后台(UNIX)

问题描述 投票:0回答:3

我有一个通过 ssh 连接到外部计算机的终端,并且有一个进程在其中运行。 是否可以将执行移至后台,以便我可以关闭 ssh 连接而无需终止它?如果是的话怎么办?

unix ssh terminal
3个回答
147
投票

按control + Z,这将暂停它并将其发送到后台。然后输入

bg
继续在后台运行。

或者,在命令末尾添加

&
以从一开始就在后台运行它。

这只会让它在后台运行,一旦你注销它仍然会被杀死。为了在注销后保持其运行,您需要使用

disown -h
“否认”该进程,以便 shell 不会将其计入需要在注销时杀死的进程中。请参阅这篇文章了解更多详情。


7
投票

您也可以使用“screen”命令,一旦您与它分离,该命令将继续运行其中的进程。


0
投票

@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>

当然,他们的手册页上还有更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.