Linux常见命令 11 – fg, bg, &, jobs, nohup

导读:本篇文章讲解 Linux常见命令 11 – fg, bg, &, jobs, nohup,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

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 配合操作吧!!

Linux常见命令 11 - fg, bg, &, jobs, nohup

(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

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!