后台运行
后台运行Jar
进程后台运行:
1  | nohup java -jar xxx.jar&  | 
添加日志
1  | nohup java -jar xxx.jar >log.txt &  | 
后台运行程序
1  | nohup ./z-wiki >log.txt &  | 
查看进程:
1  | ps -ef | grep z-wiki  | 
结束进程:
1  | kill -pid  | 
比方说我通过查看进程发现上面运行的jar包的pid是21550,就可以这样结束它:
1  | kill 21550  | 
运行脚本
添加脚本
run.sh
1  | 
  | 
添加执行权限
1  | chmod +x run.sh  | 
运行
启动
1  | ./run.sh start  | 
停止
1  | ./run.sh stop  | 
状态
1  | ./run.sh status  | 
注册为服务
新建文件
新建/etc/init.d/z-wiki.sh 文件
1  | 
  | 
注意
start的时候一定要添加cd ${ROOT_DIR},否则程序会找不到目录下的文件。
添加执行权限
1  | chmod +x /etc/init.d/z-wiki.sh  | 
设置开机启动
首先,添加为系统服务
1  | chkconfig --add z-wiki.sh  | 
开机自启动
1  | chkconfig z-wiki.sh on  | 
查看
1  | chkconfig --list  | 
搜索指定服务
1  | chkconfig --list | grep wiki  | 
启动
1  | service z-wiki.sh start  | 
停用
1  | service z-wiki.sh stop  | 
查看启动情况
1  | lsof -i:8940  | 
查看后台程序
如果使用 nohup 后台运行的命令不在当前 shell 会话中,那么 jobs -l 是无法查看这些后台作业的。
可以使用以下几种方式查看
使用ps命令
1  | ps -aux | grep "z-wiki"  | 
其中:
a:显示所有程序
u:以用户为主的格式来显示
x:显示所有程序,不以终端机来区分
使用lsof
1  | lsof -i:8940  | 
使用pgrep
1  | pgrep -f z-wiki  | 
使用top
1  | top -p $(pgrep -d',' -f "z-wiki")  | 
查看服务
列表展示
1  | ps -ef  | 
列表展示
1  | ps -ef | grep nginx  | 
树状显示
1  | pstree  | 
通过端口查看
1  | lsof -i:80  | 
查看端口开放的IP范围
1  | netstat -tuln | grep :80  | 
查看监听的端口
1  | lsof -i -P -n | grep LISTEN  | 
查看进程监听的端口
1  | lsof -i -P -n | grep nginx  | 
命令说明
nohup
如果让程序始终在后台执行,即使关闭当前的终端也执行(之前的&做不到),这时候需要nohup。
该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。
&
加在一个命令的最后,可以把这个命令放到后台执行,如
每10s在后台执行一次test.sh脚本
1  | watch -n 10 sh test.sh &  | 
Ctrl + z
可以将一个正在前台执行的命令放到后台,并且处于暂停状态。
bg
将一个在后台暂停的命令,变成在后台继续执行。如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出。
jobs
查看当前有多少在后台运行的命令
1  | jobs -l  | 
可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated。但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识。
注意:
jobs -l主要用于查看在当前 shell 会话中运行的作业及其状态。如果使用
nohup后台运行的命令不在当前 shell 会话中,那么jobs -l是无法查看这些后台作业的。
fg
将后台中的命令调至前台继续运行。如果后台中有多个命令,可以用fg %jobnumber(是命令编号,不是进程号)将选中的命令调出。
kill
法子1:通过jobs命令查看job号(假设为num),然后执行kill %num
法子2:通过ps命令查看job的进程号(PID,假设为pid),然后执行kill pid
前台进程的终止:Ctrl+c