在 Linux 中, 我们执行命令的时候, 有时会忘记放到后台执行, 而阻塞在终端前台执行, 一般情况下会 control+c 掉再重新执行, 加入放入到后台的命令, 本篇文章介绍一种方法, 不需要 control+c 掉就能直接放入到后台执行, 且支持前台后台的切换
我这里有个 webtty 的小程序, 现在我在前台执行它
1 2 3 4 5 6 7 8 9 10 11
| > ttyd -p 8080 bash [2017/01/05 14:31:42:7759] INFO: ttyd 1.2.2 (libwebsockets 1.7.5) [2017/01/05 14:31:42:7759] INFO: tty configuration: [2017/01/05 14:31:42:7760] INFO: start command: bash [2017/01/05 14:31:42:7760] INFO: reconnect timeout: 10s [2017/01/05 14:31:42:7760] INFO: close signal: SIGHUP (1) [2017/01/05 14:31:42:7799] INFO: listening on port 8080 [2017/01/05 14:32:02:1003] INFO: HTTP / - 10.1.100.239 (10.1.100.239) [2017/01/05 14:32:02:5699] INFO: HTTP /auth_token.js - 10.1.100.239 (10.1.100.239) [2017/01/05 14:32:03:3588] INFO: WS /ws - 10.1.100.239 (10.1.100.239), clients: 1 [2017/01/05 14:32:03:3600] INFO: started process, pid: 29018
|
现在这个程序挂在了我终端的前台执行, 运行正常
1 2 3 4 5 6 7 8 9 10 11 12 13
| > ttyd -p 8080 bash [2017/01/05 14:31:42:7759] INFO: ttyd 1.2.2 (libwebsockets 1.7.5) [2017/01/05 14:31:42:7759] INFO: tty configuration: [2017/01/05 14:31:42:7760] INFO: start command: bash [2017/01/05 14:31:42:7760] INFO: reconnect timeout: 10s [2017/01/05 14:31:42:7760] INFO: close signal: SIGHUP (1) [2017/01/05 14:31:42:7799] INFO: listening on port 8080 [2017/01/05 14:32:02:1003] INFO: HTTP / - 10.1.100.239 (10.1.100.239) [2017/01/05 14:32:02:5699] INFO: HTTP /auth_token.js - 10.1.100.239 (10.1.100.239) [2017/01/05 14:32:03:3588] INFO: WS /ws - 10.1.100.239 (10.1.100.239), clients: 1 [2017/01/05 14:32:03:3600] INFO: started process, pid: 29018 ^Z [1]+ Stopped ttyd -p 8080 bash
|
现在再次访问 webtty 已经没有响应, 但是没有报错退出, 显然程序是被 “暂停⏸” 了, 而不是被退出了, 再开一个终端可以看见, 进程在, 端口也在, 进程状态如下
1
| root 29016 0.0 0.1 142632 3504 pts/0 Tl 14:31 0:00 ttyd -p 8080 bash
|
1 2 3 4
| > jobs [1]+ Stopped ttyd -p 8080 bash > bg %1 [1]+ ttyd -p 8080 bash &
|
这时, 系统会自动帮我们在启动命令的最后面加入一个 &
后台命令启动
此时 webtty 的工作又恢复了正常, 而且之前暂停时在 webtty 输入的内容也都显示了出来, 由此可以看出, control+z 阻塞了程序的入口
1 2 3
| # 再次查看后台任务 > jobs [1]+ Running ttyd -p 8080 bash &
|
状态显示已在运行
1 2 3 4
| > jobs [1]+ Running ttyd -p 8080 bash & > fg %1 # 使用 fg %ID 的方式可以把后台运行的程序拉回到前台执行 ttyd -p 8080 bash
|
参考文章