1. ctrl c, ctrl z
ctrl c:将前台运行的程序杀掉
root@LUCAS-DEV-23557e:/mnt/share_disk/wmq# ping baidu.com
PING baidu.com (220.181.38.251): 56 data bytes
64 bytes from 220.181.38.251: icmp_seq=0 ttl=52 time=6.906 ms
64 bytes from 220.181.38.251: icmp_seq=1 ttl=52 time=6.831 ms
64 bytes from 220.181.38.251: icmp_seq=2 ttl=52 time=6.831 ms
--- baidu.com ping statistics ---
6 packets transmitted, 6 packets received, 0% packet loss
round-trip min/avg/max/stddev = 6.820/6.849/6.906/0.030 ms
ctrl z :可以将一个正在前台执行的命令放到后台,并且暂停。其中 [1]+ 表示工作号,,”+”代表这个命令是最近一个被放入后台的。每个被放入后台的命令都会被分配一个工作号。第一个被放入后台的命令,其工作号是 1;第二个被放入后台的命令,工作号是 2,以此类推。
[1]+ Stopped ping baidu.com
2. fg, &, bg, jobs
fg :将后台中的命令调至前台继续运行,相当于继续执行之前在前台执行的命令 ping baidu.com
root@LUCAS-DEV-23557e:/mnt/share_disk/wmq# fg 1
ping baidu.com
64 bytes from 220.181.38.251: icmp_seq=4 ttl=52 time=7.013 ms
64 bytes from 220.181.38.251: icmp_seq=5 ttl=52 time=6.860 ms
64 bytes from 220.181.38.251: icmp_seq=6 ttl=52 time=6.836 ms
&:把命令放入后台执行,但输出结果会在前台显示。同时会显示 工作号和进程号。
root@LUCAS-DEV-23557e:/mnt/share_disk/wmq# ping baidu.com &
[1] 289222
root@LUCAS-DEV-23557e:/mnt/share_disk/wmq# PING baidu.com (220.181.38.148)
64 bytes from 220.181.38.148: icmp_seq=0 ttl=52 time=6.444 ms
64 bytes from 220.181.38.148: icmp_seq=1 ttl=52 time=6.434 ms
64 bytes from 220.181.38.148: icmp_seq=2 ttl=52 time=6.396 ms
因为输出结果总是更新的在前台显示,所以如果要继续在窗口中输入信息,很不方便。但是可以输入。比如我在慌乱中输入了fg 1【分别在第四行和第五行开头】。将进程调入到了前台,然后ctrl c结束了进程。
64 bytes from 220.181.38.148: icmp_seq=9 ttl=52 time=6.383 ms
64 bytes from 220.181.38.148: icmp_seq=10 ttl=52 time=6.400 ms
64 bytes from 220.181.38.148: icmp_seq=11 ttl=52 time=6.417 ms
fg64 bytes from 220.181.38.148: icmp_seq=12 ttl=52 time=6.383 ms
1
ping baidu.com
64 bytes from 220.181.38.148: icmp_seq=13 ttl=52 time=6.456 ms
--- baidu.com ping statistics ---
14 packets transmitted, 14 packets received, 0% packet loss
round-trip min/avg/max/stddev = 6.371/6.414/6.456/0.027 ms
bg: 把后台暂停的工作恢复到后台执行。等同于继续执行&命令【看第二行】
root@LUCAS-DEV-23557e:/mnt/share_disk/wmq# bg 1
[1]+ ping baidu.com &
root@LUCAS-DEV-23557e:/mnt/share_disk/wmq# 64 bytes from 220.181.38.251
64 bytes from 220.181.38.251: icmp_seq=4 ttl=52 time=6.856 ms
64 bytes from 220.181.38.251: icmp_seq=5 ttl=52 time=6.862 ms
64 bytes from 220.181.38.251: icmp_seq=6 ttl=52 time=6.862 ms
jobs 查看当前有多少在后台运行的命令
-l | 额外列出进程的 PID 号 |
-n | 只列出上次发出通知后改变了状态的进程 |
-p | 只列出进程的 PID 号 |
-r | 只列出运行中的进程 |
-s | 只列出已停止的进程 |
示例:其中 + 号代表最近一个放入后台的工作,也是工作恢复时默认恢复的工作。- 号代表倒数第二个放入后台的工作。
root@LUCAS-DEV-23557e:/mnt/share_disk/wmq/test# jobs
[1]+ Stopped ping baidu.com
[2]- Running python test.py &
root@LUCAS-DEV-23557e:/mnt/share_disk/wmq/test# jobs -l
[1]+ 289273 Stopped ping baidu.com
[2]- 289274 Running python test.py &
root@LUCAS-DEV-23557e:/mnt/share_disk/wmq/test# jobs -p
289273
289274
root@LUCAS-DEV-23557e:/mnt/share_disk/wmq/test# jobs -r
[2]- Running python test.py &
root@LUCAS-DEV-23557e:/mnt/share_disk/wmq/test# jobs -s
[1]+ Stopped ping baidu.com
3. nohup
前面的bg, &, fg,只是把进程到后/前台运行,但是前后台是依赖当前终端的。当退出终端后,进程就会中断。所以如果想让命令退出终端,也能继续运行,此时就可以用nohup:nohup + 命令
(1) nohup:持续运行且不中断,当前行会hang up在最新行,如下图所示。如果关闭了终端,程序还会继续运行。那我们怎么停止呢,ps -aux和kill 配合操作吧!!
(2)nohup 并不是在后台运行,默认是持续在前台运行【个人觉得,也许不准确。因为jobs -l并没有显示进程,ctrl c 却能结束nohup进程】。&是后台运行,所以 nohup命令结尾加上& ,是指程序能够在后台继续运行命令,如:nohup python main.py &
(3) 输出结果重定向
- 如果不写重定向文件,nohup会默认输出到当前目录下的nohup.out文件中。
- 如果当前目录的nohup.out文件禁止写入数据,nohup命令结果会自动输出到$HOME/nohup.out文件中。
- 将标准输出/错误输出,定向到固定文件: nohup python main.py > out.txt 2>&1 &
- 将标准输出/错误输出,定向到黑洞文件,直接销毁: nohup python main.py > /dev/null 2>&1 &
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/87460.html