前台进程和后台进程的区别:
一、前台进程:输出的结果展示在终端上
[root@node-a shell]# ping baidu.com PING baidu.com (39.156.66.10) 56(84) bytes of data. 64 bytes from 39.156.66.10 (39.156.66.10): icmp_seq=1 ttl=52 time=7.47 ms 64 bytes from 39.156.66.10 (39.156.66.10): icmp_seq=2 ttl=52 time=7.32 ms 64 bytes from 39.156.66.10 (39.156.66.10): icmp_seq=3 ttl=52 time=7.30 ms 64 bytes from 39.156.66.10 (39.156.66.10): icmp_seq=4 ttl=52 time=7.32 ms 64 bytes from 39.156.66.10 (39.156.66.10): icmp_seq=5 ttl=52 time=7.33 ms 64 bytes from 39.156.66.10 (39.156.66.10): icmp_seq=6 ttl=52 time=7.30 ms
二、后台进程:执行放在后台,不影响终端操作,任务后台继续
命令:
command & # 未启动的command放到后台运行 jobs # 查看后台进程列表 ctrl+z # 暂停进程 bg # 将程序放入后台运行,与 & 一样 fg # 将后台任务放入前台执行
实验:nc网络安全工具
安装:
yum install -y nc
执行命令:
nc -lp 8000 本机开放8000端口 -l : listen -p : port
开放系统中任意一个未被占用的端口,执行命令后,当前终端一直处于被占用状态
将命令放入后台执行
[root@node-a ~]# nc -lp 8000 & [1] 22542 1 表示正在当前终端后台运行的任务 22542 表示所产生的进程PID
jobs -l 命令查看当前终端正在后台进行的进程任务,-l选项可以同时显示该进程对应的PID
[root@node-a ~]# jobs -l [1]+ 22542 Running nc -lp 8000 &
1 表示该进程在后台的任务编号 + 表示这是默认最近的一个后台命令,若当前终端没有后台进程,将不会显示任何信息
fg命令 将后台执行的命令再次转到前台,1表示指定后台进程对应的任务编号,结束进程使用ctrl+c强制停止
[root@node-a ~]# fg 1 nc -lp 8000 ^C
除了使用在命令后面加&符号之外,还可以按ctrl+z 组合键将一个进程转入后台,不过这种方式转入后台的进程将处于停止状态
[root@node-a ~]# nc -lp 8000 ^Z [1]+ Stopped nc -lp 8000
进程已处于停止状态
[root@node-a ~]# jobs -l [1]+ 23480 Stopped nc -lp 8000
bg 命令可以使被挂起的进程在后台继续执行
[root@node-a ~]# bg 1 [1]+ nc -lp 8000 & [root@node-a ~]# jobs -l [1]+ 23480 Running nc -lp 8000 &
三、终止进程执行
前台运行的进程,可以通过ctrl+c终止
后台运行的进程,先通过fg命令将其调入前台,然后通过ctrl+c终止
如果需要终止一个其他终端或者系统后台进程,那么借助kill命令
kill命令终止进程,需要使用PID作为参数
[root@node-a ~]# jobs -l [1]+ 23480 Running nc -lp 8000 & [root@node-a ~]# kill 23480 [root@node-a ~]# jobs -l [1]+ 23480 Terminated nc -lp 8000
kill命令 可以发出多种信号,每个信号都有编号,其中默认15号信号
-9号信号SIGKILL,强行将进程终止,一般情况下不要轻易使用-9选项 可能会导致程序部分数据丢失