进程的前台和后台

在linux中有程序在前台和后台切换的问题,前台执行的会占用终端,不能释放比如ping命令。这样的命令就可以放在后台执行,前台还能继续执行其他操作。

看这个ping命令

[root@centos70 ~]# ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.181 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.091 ms
ls           
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.088 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.094 ms

上面我在执行ping命令的过程中输入ls,但什么都没有输出所以这就是前台执行ping过程中在占用前台资源,ls是什么都不会输出的。而在命令后加个&,该命令就会在后台执行,但是会在前台显示。

[root@centos70 ~]# PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.274 ms
pwd
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.087 ms

/root

上面我在ping的过程中执行pwd 这次却执行了。但是ping命令也在执行,看着很不舒服但不影响输入的命令换行也无影响。说了这么多,不知道发现问题没有。。。这个影响不到ping命令怎么发送取消指令呢?

这下问题来了,想要终止ping我的方法是ps -ef|grep “ping”之后再用kill -9 跟上进程号杀死该进程就行了

[root@centos70 ~]# ps -ef |grep ping
root      27389  26574  0 13:20 pts/3    00:00:00 ping 127.0.0.1
root      27391  27317  0 13:20 pts/5    00:00:00 grep --color=auto ping
[root@centos70 ~]# kill -9 27389

在后台运行的进程也有进程号,查看用jobs

[root@centos70 ~]# PING 127.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.073 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.084 ms
jo64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.065 ms
bs
[1]+  Running                 ping 127.1 &

上面代码因为后台进程运行不停止,所以标准输入会错行。当我输入jobs是出现running一行那个中括号里面就是进程号。现在就要提及另一个命令了,fg空格跟上进程号可以吧后台调回前台,之后ctrl+c也可以终止该ping命令。

[root@centos70 ~]# ping 127.0.0.1 &
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.085 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.094 ms
jobs64 bytes from 127.0.0.1: icmp_seq=5 ttl=64 time=0.093 ms                                                     64 bytes from 127.0.0.1: icmp_seq=6 ttl=64 time=0.09664 bytes from 127.0.0.1: icmp_seq=7 ttl=64 time=0.095 ms
64 bytes from 127.0.0.1: icmp_seq=8 ttl=64 time=0.094 ms
[1]+  Running                 ping 127.0.0.1 &
64 bytes from 127.0.0.1: icmp_seq=9 ttl=64 time=0.089 ms
fg 1
ping 127.0.0.1
64 bytes from 127.0.0.1: icmp_seq=10 ttl=64 time=0.086 ms
^C
--- 127.0.0.1 ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9000ms
rtt min/avg/max/mdev = 0.085/0.100/0.189/0.032 ms
[root@centos70 ~]#

上面虽然执行后台运行,但是仍可以调回前台。


下面搞了一张图,如有雷同。好吧是我搜的wKioL1m00emD11bqAABIHdQySHs533.png

看图说话,前台运行直接快捷键就可以后台休眠。

想要直接后台,就是命令后跟     &

后台休眠bg 加上进程号直接激活,后台运行(命令中间有个空格)

后台两种情况都可以用fg来调到前台。

还有!jobs查看后台的进程号(可能不只有一种进程)


怎么让后台运行的进程进入休眠呢?

在kill命令中有发信号这种用法,对应数字加进程可以修改状态或杀死进程,这里(kill -19 进程号)就是把后台运行调到后台休眠。其他数字什么含义这里就不再讲解了。