Total Pageviews

Friday, 11 September 2020

用screen工具或Tmux工具让程序在后台运行

screen工具

Screen 是一款由 GNU 计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换,可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。

也就是说 screen 创建了一个新的会话,并时刻记录这会话的输出,同时也能把在当前会话中显示;用户退出并不影响 screen 创建的会话,从而实现后台一直运行

# 安装
yum install screen

# 列出当前所有session
screen -ls

# 恢复到某个会话
screen -r {sessionName|pid}

# 创建名为{sessionName}的会话,立即进入
screen -S {sessionName}

# 创建名为{sessionName}的会话,后执行一条命令,且不进入
screen -dmS {sessionName} [shell command]

# 创建名为{sessionName}的会话,后执行一条命令,名字自动命名为[pid.]tty.host
screen [shell command]

# 检查目前所有的screen作业,并删除已经无法使用的screen作业
screen -wipe

在每个 screen 下,可以通过下面的快捷键来进行管理多个 shell(窗口)。注意按键的触发方式:ctrl+a 后松开,再按一次命令键

  • ctrl+a d 放到后台,切回到用户会话
  • ctrl+a k 杀死当前的窗口,同时也将杀死这个窗口中正在运行的进程
  • ctrl+a c 创建新的 shell,多个 shell 通过 ca 0~9,a,n,p 进行切换
  • ctrl+a w 显示所有窗口列表
  • ctrl+a | 左右分屏
  • ctrl+a TAB 在分屏中跳转


Tmux工具

和 screen 用法相似,不过更厉害,快捷键更多.

# 安装
yum install tmux
# 新建
tmux new -s {sessionName}
# 恢复
tmux a -t {sessionName}
tmux ls

基本操作同 screen,注意按键的触发方式:ctrl+b 后松开,再按一次命令键。分为三类,分为会话操作,窗口操作,面板操作

  • ctrl+b d 放到后台,切回到用户会话
  • ctrl+b c 创建一个 shell,在底部的 tab 中可以看到有几个 shell 在运行
  • ctrl+a 0~9|w 多个 shell 中切换,
  • ctrl+a % 左右分屏
  • ctrl+a o 在分屏中跳转
----------------------------------------------------------------
Screen 命令与 Tmux 命令

另一种思路是使用 terminal multiplexer (终端复用器:在同一个终端里面,管理多个session),典型的就是 Screen 命令和 Tmux 命令。

它们可以在当前 session 里面,新建另一个 session。这样的话,当前 session 一旦结束,不影响其他 session。而且,以后重新登录,还可以再连上早先新建的 session。

Screen 的用法如下。


# 新建一个 session
$ screen
$ node server.js

然后,按下ctrl + Actrl + D,回到原来的 session,从那里退出登录。下次登录时,再切回去。


$ screen -r

如果新建多个后台 session,就需要为它们指定名字。


$ screen -S name

# 切回指定 session
$ screen -r name
$ screen -r pid_number

# 列出所有 session
$ screen -ls

如果要停掉某个 session,可以先切回它,然后按下ctrl + cctrl + d

Tmux 比 Screen 功能更多、更强大,它的基本用法如下。


$ tmux
$ node server.js

# 返回原来的session
$ tmux detach

除了tmux detach,另一种方法是按下Ctrl + Bd ,也可以回到原来的 session。


# 下次登录时,返回后台正在运行服务session
$ tmux attach

如果新建多个 session,就需要为每个 session 指定名字。


# 新建 session
$ tmux new -s session_name

# 切换到指定 session
$ tmux attach -t session_name

# 列出所有 session
$ tmux list-sessions

# 退出当前 session,返回前一个 session 
$ tmux detach

# 杀死指定 session
$ tmux kill-session -t session-name

No comments:

Post a Comment