工具-screen-管理终端会话(服务器长时间运行任务)

screen 是一个用于管理多个终端会话的实用工具,常用于在单个终端窗口中运行多个虚拟终端。它允许用户在一个终端窗口中分离和重新连接会话,非常适合在远程服务器上工作或长时间运行任务时使用。


主要功能

1.会话管理

可以创建多个虚拟终端会话,并在这些会话之间切换。

即使断开与服务器的连接,会话仍会在后台运行。

2.会话分离与恢复

可以分离(detach)当前会话,稍后重新连接(reattach)到同一个会话。

非常适合在远程工作时保持任务运行。

3.多窗口支持

可以在一个 screen 会话中创建多个窗口,并在这些窗口之间切换。

4.会话共享

允许多个用户同时连接到同一个 screen 会话,适合协作工作。

5.日志记录

可以将终端输出保存到日志文件中。


常用命令

  1. 启动一个新的 screen 会话

    screen

    这会创建一个新的会话并进入其中。

  2. 创建命名会话

    screen -S session_name

    可以为会话指定一个名称,方便后续管理。

  3. 分离当前会话
    按下 Ctrl + A,然后按 D(Detach)。
    或者使用命令:

    screen -d
  4. 列出所有会话

    screen -ls

    这会显示所有正在运行的 screen 会话。

  5. 重新连接到会话

    screen -r session_name_or_pid

    通过会话名称或进程 ID 重新连接到会话。

  6. 创建新窗口
    按下 Ctrl + A,然后按 C(Create)。

  7. 切换窗口
    按下 Ctrl + A,然后按 N(Next)或 P(Previous)。

  8. 结束当前会话
    在会话中输入 exit 或按下 Ctrl + D

  9. 日志记录
    按下 Ctrl + A,然后按 H 开始记录日志。日志会保存到当前目录下的 screenlog.x 文件中。


示例场景

1.远程服务器任务

在远程服务器上启动一个长时间运行的任务(如编译或数据处理)。

使用 screen 启动会话,分离会话后断开连接。

稍后重新连接并恢复会话,查看任务进度。

2.多任务管理

在一个终端中创建多个窗口,分别运行不同的任务(如开发、测试、日志监控等)。

3.协作工作

多个用户连接到同一个 screen 会话,实时协作。

杀掉进程

命令 1: ps -ef | grep SCREEN | grep test | grep -v grep | awk '{print $2}' | xargs kill

  1. ps -ef
    • 列出系统中所有正在运行的进程的详细信息。
  2. grep SCREEN
    • 过滤出包含 SCREEN 关键字的进程行。
  3. grep test
    • 进一步过滤出包含 test 关键字的进程行。
  4. grep -v grep
    • 排除掉 grep 命令自身的进程。
  5. awk '{print $2}'
    • 提取每行的第二列,即进程 ID(PID)。
  6. xargs kill
    • 将前面获取的 PID 作为参数传递给 kill 命令,终止这些进程。
特点:
  • 使用 ps 和多个 grep 命令进行进程过滤。
  • 匹配的是进程名或命令行中包含 SCREEN 和 test 的进程。
  • 可能会因为 grep 的模糊匹配而误杀进程(例如,匹配到 SCREEN 或 test 的其他部分)。

命令 2: pgrep -f 'SCREEN.*test' | xargs kill

  1. pgrep -f 'SCREEN.*test'
    • pgrep 是一个专门用于通过名称或其他属性查找进程的命令。
    • -f 选项表示匹配完整的命令行(而不仅仅是进程名)。
    • 'SCREEN.*test' 是一个正则表达式模式:
      • SCREEN 匹配进程名或命令行中包含 SCREEN 的部分。
      • .* 是正则表达式中的通配符,表示任意字符(包括无字符)重复任意次数。
      • test 匹配进程名或命令行中包含 test 的部分。
    • 整体模式会匹配所有命令行中同时包含 SCREEN 和 test 的进程。
  2. | xargs kill
    • 将 pgrep 的输出(即匹配到的进程 PID)通过管道传递给 xargs
    • xargs 将输入的 PID 作为参数传递给 kill 命令,终止这些进程。
特点:
  • 使用 pgrep 进行进程查找,通常更简洁和高效。
  • 匹配的是命令行中同时包含 SCREEN 和 test 的进程。
  • 由于 pgrep -f 匹配完整的命令行,通常比 ps | grep 更精确。

比较:

  • 精确度pgrep -f 通常更精确,因为它直接匹配完整的命令行,而 ps | grep 可能会因为多个 grep 命令的模糊匹配导致误杀。
  • 简洁性pgrep 命令更简洁,减少了管道和 grep 命令的数量。
  • 灵活性pgrep 提供了更多的选项(如 -f-l 等),可以更灵活地匹配进程。

注意事项:

  • 执行前建议先检查匹配的进程,避免误操作:
     

    bash

    ps -ef | grep SCREEN | grep test | grep -v grep # 对于第一个命令
    pgrep -af 'SCREEN.*test' # 对于第二个命令
  • 如果目标进程需要特权,可能需要 sudo kill
  • kill 默认发送 SIGTERM(15),若进程不响应,可改用 kill -9(强制终止)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值