本文是《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
