运行进程时,进程会占据前台终端,有时想要将进程放入后端工作,怎么做呢?下面介绍几种方法。
1 后台运行程序
1.1 &
用法:command &
用途:使程序在后台运行
用之前做过的Minio服务来举例子:
./minio server /m1 /m2 /m3 /m4 &

1.2 ctrl + z
可以将一个正在前台执行的命令放到后台,并且处于暂停状态。
1.3 nohup
用法:nohup command & (一般和&一起用)
用途:不挂断地运行命令。
nohup ./minio server /m1 /m2 /m3 /m4 &

一般用nohup会把输出重定向。
nohup ./minio server /m1 /m2 /m3 /m4 > out.file 2>&1 &
// >out.file是将command的输出重定向到out.file文件,即输出内容不打印到屏幕上,而是输出到out.file文件中。
// 2>&1 是将标准出错重定向到标准输出,这里的标准输出已经重定向到了out.file文件,即将标准出错也输出到out.file文件中。最后一个&, 是让该命令在后台执行。
// 试想2>1代表什么,2与>结合代表错误重定向,而1则代表错误重定向到一个文件1,而不代表标准输出;换成2>&1,&与1结合就代表标准输出了,就变成错误重定向到标准输出.
使用了nohup之后,很多人就这样不管了,其实这样有可能在当前账户非正常退出或者结束的时候,命令还是自己结束了。所以在使用nohup命令后台运行命令之后,需要使用exit
正常退出当前账户,这样才能保证命令一直在后台运行。
2 进程查看命令
2.1 jobs指令
查看当前有多少在后台运行的命令。
jobs命令只看当前终端生效的,关闭终端后,在另一个终端jobs已经无法看到后台跑得程序了,此时利用ps(进程查看命令)
jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated。但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识。

2.2 ps指令
查看后台进程
// 查看运行进程
ps -ef|grep mino

2.3 netstat 端口查看指令
如果某个进程起不来,可能是某个端口被占用。
netstat -ntlp|grep 9000
/* netstat命令各个参数说明如下:
-t : 指明显示TCP端口
-u : 指明显示UDP端口
-l : 仅显示监听套接字(所谓套接字就是使应用程序能够读写与收发通讯协议(protocol)与资料的程序)
-p : 显示进程标识符和程序名称,每一个套接字/端口都属于一个程序。
-n : 不进行DNS轮询,显示IP(可以加速操作)
*/

3 进程删除命令
3.1 kill 指令
删除进程。

网友评论