screen
是一个用于管理多个终端会话的实用工具,常用于在单个终端窗口中运行多个虚拟终端。它允许用户在一个终端窗口中分离和重新连接会话,非常适合在远程服务器上工作或长时间运行任务时使用。
主要功能
1.会话管理:
可以创建多个虚拟终端会话,并在这些会话之间切换。
即使断开与服务器的连接,会话仍会在后台运行。
2.会话分离与恢复:
可以分离(detach)当前会话,稍后重新连接(reattach)到同一个会话。
非常适合在远程工作时保持任务运行。
3.多窗口支持:
可以在一个 screen
会话中创建多个窗口,并在这些窗口之间切换。
4.会话共享:
允许多个用户同时连接到同一个 screen
会话,适合协作工作。
5.日志记录:
可以将终端输出保存到日志文件中。
常用命令
-
启动一个新的
screen
会话:screen
这会创建一个新的会话并进入其中。
-
创建命名会话:
screen -S session_name
可以为会话指定一个名称,方便后续管理。
-
分离当前会话:
按下Ctrl + A
,然后按D
(Detach)。
或者使用命令:screen -d
-
列出所有会话:
screen -ls
这会显示所有正在运行的
screen
会话。 -
重新连接到会话:
screen -r session_name_or_pid
通过会话名称或进程 ID 重新连接到会话。
-
创建新窗口:
按下Ctrl + A
,然后按C
(Create)。 -
切换窗口:
按下Ctrl + A
,然后按N
(Next)或P
(Previous)。 -
结束当前会话:
在会话中输入exit
或按下Ctrl + D
。 -
日志记录:
按下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
ps -ef
- 列出系统中所有正在运行的进程的详细信息。
grep SCREEN
- 过滤出包含
SCREEN
关键字的进程行。
- 过滤出包含
grep test
- 进一步过滤出包含
test
关键字的进程行。
- 进一步过滤出包含
grep -v grep
- 排除掉
grep
命令自身的进程。
- 排除掉
awk '{print $2}'
- 提取每行的第二列,即进程 ID(PID)。
xargs kill
- 将前面获取的 PID 作为参数传递给
kill
命令,终止这些进程。
- 将前面获取的 PID 作为参数传递给
特点:
- 使用
ps
和多个grep
命令进行进程过滤。 - 匹配的是进程名或命令行中包含
SCREEN
和test
的进程。 - 可能会因为
grep
的模糊匹配而误杀进程(例如,匹配到SCREEN
或test
的其他部分)。
命令 2: pgrep -f 'SCREEN.*test' | xargs kill
pgrep -f 'SCREEN.*test'
pgrep
是一个专门用于通过名称或其他属性查找进程的命令。-f
选项表示匹配完整的命令行(而不仅仅是进程名)。'SCREEN.*test'
是一个正则表达式模式:SCREEN
匹配进程名或命令行中包含SCREEN
的部分。.*
是正则表达式中的通配符,表示任意字符(包括无字符)重复任意次数。test
匹配进程名或命令行中包含test
的部分。
- 整体模式会匹配所有命令行中同时包含
SCREEN
和test
的进程。
| 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
(强制终止)。