本文是《Linux 入门指南》的第十篇文章,以 Ubuntu 21.10 为例,介绍了 Linux 后台命令。
nohup(在后台不挂断地运行命令)
描述:
"no hang up(不挂断)" 的缩写,在后台不挂断地运行命令。
在关闭终端/退出账户后,nohup
在后台继续运行。
默认情况下,nohup
的输出会保存到当前目录下的 nohup.out 文件中。
用法:
nohup [命令]
选项:
长选项 | 意义 |
---|---|
--help | 显示此帮助信息并退出 |
--version | 显示版本信息并退出 |
实例:
后台运行命令(在后台不挂断地运行 wget https://speed.hetzner.de/100MB.bin
)
nohup wget https://speed.hetzner.de/100MB.bin
如果你想停止运行命令,你需要查找对应的 PID,手动杀死对应的进程。
# 查找对应的 PID
jianrry@jianrry:~$ ps -aux | grep wget
jianrry 2882 0.6 0.1 24220 6700 ? S 23:23 0:00 wget https://speed.hetzner.de/100MB.bin
jianrry 2940 0.0 0.0 17808 2488 pts/0 S+ 23:23 0:00 grep --color=auto wget
# 手动杀死对应的进程
jianrry@jianrry:~$ kill -9 2882
screen(会话管理)
描述:
screen
可以创建会话,在会话窗口中运行命令。
挂起会话后,会话窗口中的命令在后台继续运行。
在关闭终端/退出账户后,会话窗口中的命令不受影响。
用法:
screen [选项] [会话名]
选项:
选项 | 意义 |
---|---|
-4 | 仅将主机名解析为 IPv4 地址 |
-6 | 仅将主机名解析为 IPv6 地址 |
-a | 强制所有功能进入每个窗口的终端 |
-A | 将所有的视窗都调整为目前终端机的大小 |
-c file | 读取配置文件而不是 .screenrc |
-d (-r) | 挂起正在运行的会话(并在此处恢复) |
-dmS name | 启动作为守护程序:挂起会话 |
-D (-r) | 挂起和注销远程(并在此处恢复) |
-D -RR | 做任何需要的事情来获得一个会话 |
-e xy | 更改命令字符 |
-f | 流量控制开启 -fn = off ;-fa = auto |
-h lines | 设置回滚历史记录缓冲区的大小 |
-i | 当流量控制打开时,会更快地中断输出 |
-l | 登录模式开启 (update /var/run/utmp), -ln = off |
-ls [match] or -list | 列出所有的会话 |
-L | 打开输出日志记录 |
-Logfile file | 设置日志文件名 |
-m | 忽略已经运行的会话,强制创建一个新的会话 |
-O | 选择最佳输出而不是 exact vt100 emulation |
-p window | 如果已命名的窗口存在,则预选该窗口 |
-q | 安静的启动。 如果不成功,则使用非零返回代码退出 |
-Q | 命令将向查询过程的 STDOUT 发送响应 |
-r [session] | 恢复已挂起的会话 |
-R | 尽可能地恢复一个会话,如果无法恢复,则创建一个新的会话 |
-s shell | 指定建立新会话时,所要执行的 shell |
-S sockname | 指定会话名 |
-t title | 设置标题(窗口名称) |
-T term | 对窗口使用 $term,而不是 screen |
-U | 使用 UTF-8 编码 |
-v | 显示版本信息 |
-wipe [match] | 清理无法使用的会话 |
-x | 恢复之前挂起的会话 |
-X | 在指定的会话中,以命令的形式执行 |
实例:
创建会话(创建一个会话 wget,并打开一个窗口,在窗口中可以运行命令)
jianrry@jianrry:~$ screen -S wget
挂起会话(在会话窗口中,按下 "Ctrl + A + D" 键,会挂起当前的会话)
# 会出现下面的提示 ,其中 wget 是会话名,11798 是进程的 ID
[detached from 11798.wget]
恢复会话(恢复会话 wget,打开之前的窗口,在窗口中可以继续运行命令)
jianrry@jianrry:~$ screen -r wget
列出会话(列出所有的会话)
jianrry@jianrry:~$ screen -ls
There is a screen on:
11798.wget (2021年11月21日 16时17分02秒) (Detached)
1 Socket in /run/screen/S-jianrry.
结束会话(可以通过会话名 wget 结束会话 wget 并退出)
jianrry@jianrry:~$ screen -XS wget quit
清理会话(清理已经死掉的会话,比如说因为手动杀死对应的进程而死掉的会话)
jianrry@jianrry:~$ screen -wipe