JAVA系列笔记⼗⼋之nohup实现后台运⾏程序
1. 后台执⾏
⼀般运⾏linux上的程序都是执⾏ .sh ⽂件(./sh⽂件),那如果不影响当前CMD窗⼝的操作,需要后台运⾏怎么办呢?
这时就需要借助 nohup 和 & 命令来实现。
nohup java -server -Xms128M -Xmx512M -XX:MetaspaceSize=128M -jar test.jar $1 $2 $3 &
(1) nohup
加在⼀个命令的最前⾯,表⽰不挂断的运⾏命令
(2) &
加载⼀个命令的最后⾯,表⽰这个命令放在后台执⾏
2.. 查看后台运⾏的命令
有两个命令可以来查看,ps 和 jobs。区别在于 jobs 只能查看当前终端后台执⾏的任务,换了终端就看不见了。⽽ps命令适⽤于查看瞬时进程的动态,可以看到别的终端的任务。
(1) jobs
[root@localhost test]# jobs
[1]- 运⾏中 nohup java -ding=UTF-8 -Dname=Runtime-Name -server -Xms128M -Xmx512M -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=256M -XX:+HeapDumpOnOutOfMemoryError -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -jar test.jar $1 $2 $3 &(⼯作⽬
录:/home/ams/ams-server/test)
[2]+ 运⾏中 nohup java -ding=UTF-8 -Dname=Container-Name -server -Xms128M -Xmx512M -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=256M -XX:+HeapDumpOnOutOfMemoryError -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -jar test1.jar $1 $2 $3 &
先后起了两个后台运⾏的进程,使⽤jobs后都显⽰出来了。“+”代表最近的⼀个任务(当前任务),“-”代
表之前的任务。
只有在当前命令⾏中使⽤ nohup和& 时,jobs命令才能将它显⽰出来。如果将他们写到 .sh 脚本中,然后执⾏脚本,是显⽰不出来的
⽐如执⾏下⾯这个脚本后,jobs显⽰不出来:
#!/bin/bash
nohup java -ding=UTF-8 -Dname=Runtime-Name -server -Xms128M -Xmx512M -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=256M -
XX:+HeapDumpOnOutOfMemoryError -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -jar test.jar $1 $2 $3 &
(2) ps命令
[root@localhost test]# ps -aux|grep java
root 21219 0.3 3.9 6258172 148900 pts/0Sl 10:08 0:02 java -ding=UTF-8 -Dname=Runtim
e-Name -server -Xms128M -Xmx512M -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=256M -XX:+HeapDumpOnOutOfMemoryError -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -jar test.jar
root 21662 0.2 3.0 5041008 116648 pts/0Sl 10:10 0:01 java -ding=UTF-8 -Dname=Container-Name -server -Xms128M -Xmx512M -
XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=256M -XX:+HeapDumpOnOutOfMemoryError -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -
XX:+CMSClassUnloadingEnabled -jar test1.jar
root 23761 0.0 0.0 112664 972 pts/0S+ 10:19 0:00 grep--color=auto java
这个是查看进程常⽤的命令,不多说了。
a: 显⽰所有程序 u: 以⽤户为主的格式来显⽰ x: 显⽰所有程序,不以终端机来区分
3. 关闭当前后台运⾏的程序
kill 命令
(1)通过jobs命令查看jobnum,然后执⾏ kill %jobnum
(2)通过ps命令查看进程号PID,然后执⾏ kill %PID
如果是前台进程的话,直接执⾏ Ctrl+c 就可以终⽌了
4. 前后台进程的切换与控制
(1)fg命令
将后台中的命令调⾄前台继续运⾏
如果后台中有多个命令,可以先⽤jobs查看jobnun,然后⽤ fg %jobnum 将选中的命令调出。
(2)Ctrl + z 命令
将⼀个正在前台执⾏的命令放到后台,并且处于暂停状态
(3)bg命令
将⼀个在后台暂停的命令,变成在后台继续执⾏
如果后台中有多个命令,可以先⽤jobs查看jobnum,然后⽤ bg %jobnum 将选中的命令调出继续执⾏。
[root@localhost test]# jobs
[1]- 运⾏中 nohup java -ding=UTF-8 -Dname=Runtime-Name -server -Xms128M -Xmx512M -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=256M -XX:+HeapDumpOnOutOfMemoryError -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -jar test.jar $1 $2 $3 &(⼯作⽬
录:/home/test)
[2]+ 运⾏中 nohup java -ding=UTF-8 -Dname=Container-Name -server -Xms128M -Xmx512M -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=256M -XX:+HeapDumpOnOutOfMemoryError -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -jar test1.jar $1 $2 $3 &
java笔记总结//使⽤fg后,将任务2调⾄前台运⾏
[root@localhost test]# fg 2
nohup java -ding=UTF-8 -Dname=Container-Name -server -Xms128M -Xmx512M -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=256M -
XX:+HeapDumpOnOutOfMemoryError -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -jar test1.jar $1 $2 $3
^Z
//使⽤ctrl+Z后,将任务2放置到后台,并暂停
[2]+ 已停⽌ nohup java -ding=UTF-8 -Dname=Container-Name -server -Xms128M -Xmx512M -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=256M -XX:+HeapDumpOnOutOfMemoryError -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -jar test1.jar $1 $2 $3
//使⽤bg后,激活任务2的运⾏
[root@localhost test]# bg 2
[2]+ nohup java -ding=UTF-8 -Dname=Container-Name -server -Xms128M -Xmx512M -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=256M -
XX:+HeapDumpOnOutOfMemoryError -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -jar test1.jar $1 $2 $3 &
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论