&
首先,linux进程是区分前台进程和后台进程的。
通常,在终端输入的命令执行的前台进程模式。如果一个命令要执行好久,就会阻塞住终端好久,不能进行其他工作,所以,我们可以把执行花费时间很长的任务使用后台进程模式运行,我们就可以在同一终端干其他事!、
以前台进程模式运行
通常使用的方式
1 | [root@localhost cdnjs]# find / -name xml & |
以后台进程模式运行
1 | [root@localhost cdnjs]# find / -name xml & |
这样,这个查找程序就会在后台运行。它运行的同时不影响你干别的事情。
在后台运行时,找到符合的文件,还是会在终端中输出。
查看后台任务
1 | [root@localhost cdnjs]# jobs |
切换前台/后台模式
前台切后台
在运行命令后,有的时候忘记了在命令之后加上‘&’符号,又不愿意停下此命令重新改写。这是可以按[ctrl+z],把当前程序切入后台。
但是要注意此时在后台的这个程序是处于 Stopped 状态
要继续执行的话,先使用jobs命令找出当前任务的jobId,然后按如下操作
1 | [root@localhost cdnjs]#bg 1 |
后台切回前台
先使用jobs命令找出当前任务的jobId,然后按如下操作
1 | [root@localhost cdnjs]#fg 1 |
nohup
不管是前台进程还是后台进程,在终端关闭的时候,linux会发出终端关闭信号,让在终端中运行的进程结束。
但是,我们可能会有这样的需求:
在linux进行下载很久的任务,但是终端关闭的时候,我们是不希望下载被终止的。所以,可以采用nohup命令的方式,让程序运行的时候,忽略掉终端关闭的信号。
格式为:
1 | nohup 执行程序的命令 |
tip
如果想让一个程序在后台运行,只要在执行命令的末尾加上一个&符号就可以了。但是这种方式不是很保险,有些程序当你登出终端后它就会停止。那么如何让一个程序真正永远在后台执行呢。答案就是使用 nohup和&组合使用
格式为:
1 | nohup 执行程序的命令 & |
screen
nohup和&的缺点是,如果你要在一个shell会话里面执行多个命令和脚本,那么要每个命令和脚本都要加nohup和&非常麻烦,所以才有了screen。
1 | screen [-AmRvx -ls -wipe][-d <作业名称>][-h <行数>][-r <作业名称>][-s <shell>][-S <作业名称>] |
1 | -A 将所有的视窗都调整为目前终端机的大小。 |
1、常用命令
1 | screen -ls # 查看所有screen |
2、快捷键
1 | 默认的 command key 是 ctrl+a |
管理
查看运行的后台进程
(1)jobs -l
jobs命令只看当前终端生效的,关闭终端后,在另一个终端jobs已经无法看到后台跑得程序了,此时利用ps(进程查看命令)
(2)ps -ef
1 | ps -aux|grep chat.js |
注:
用ps -def | grep查找进程很方便,最后一行总是会grep自己
用grep -v参数可以将grep命令排除掉
1 | ps -aux|grep chat.js| grep -v grep |
再用awk提取一下进程ID
1 | ps -aux|grep chat.js| grep -v grep | awk ``'{print $2}' |
3.如果某个进程起不来,可能是某个端口被占用
查看使用某端口的进程
1 | lsof -i:8090 |
1 | netstat -ap|grep 8090 |
查看到进程id之后,使用netstat命令查看其占用的端口
1 | netstat -nap|grep 7779 |
使用kill杀掉进城后再启动
4.终止后台运行的进程
1 | kill -9 进程号 |