Linux常用命令小抄
Linux常用命令小抄
linux下java项目在后台启动的几种方式
启动java程序
(1)直接启动,控制台退出则关掉应用
java -jar uap-register-server-1.0.0.jar
(2)后台启动,控制台退出不会关掉应用
nohup java -jar uap-register-server-1.0.0.jar &
(3)后台启动并且输出日志,控制台退出不会关掉应用
nohup java -jar uap-register-server-1.0.0.jar >> ./register.log 2>&1 &
(3)后台启动(加内存)并且输出日志,控制台退出不会关掉应用
nohup java -jar -Xms1024m -Xmx2048m uap-register-server-1.0.0.jar>> ./register.log 2>&1 &
关闭程序
(1)查询java应用程序
ps -ef|grep java
(2)强制杀掉进程
kill -9 xxx
Linux 环境如何使用 kill 命令优雅停止 Java 服务
1 前言
我们在开发 Java Web 服务时,如果使用外部 Tomcat Web容器,那么启停服务可以直接使用 Tomcat 自带的脚本。不过现在大多数服务使用 Spring Boot 框架来开发,使用内嵌的 Tomcat / Jetty Web 容器,所以这时我们一般使用特定的命令或者编写脚本来启停 Web 服务。
我们开发的 Web 服务一般部署在 Linux 服务器上,以下操作基于 Linux 服务器。如果要停止在运行中的 Java 服务,一般会使用两步骤。
首先找出 Java 服务的进程 ID,可以使用 JDK 自带的jps
命令或者 Linux 平台的ps
(process status) 命令。
[root@chenpihost ~]# jps
8141 jar
8207 Jps
[root@chenpihost ~]# jps -l
8141 chenpi-kill-demo-2.6.7.jar
8223 sun.tools.jps.Jps
[root@chenpihost ~]#
[root@chenpihost ~]# ps -ef | grep java
root 8141 7379 34 12:55 pts/0 00:00:42 java -jar chenpi-kill-demo-2.6.7.jar
root 8242 8092 0 12:57 pts/1 00:00:00 grep --color=auto java
1234567891011
然后向 Java 进程发送信号,告知其停止服务,例如使用 Linux kill 命令杀死特定的进程。
[root@chenpihost ~]# kill 8141
1
如果使用 Linux Shell 脚本启停 Java 服务,会用到 kill 这个命令,下面来了解此命令的用法以及开发中需要注意的事项。
2 kill 命令
kill()
是一个计算机编程语言函数,kill 函数可以向进程发送signal()
。在 Linux 里使用的 kill 命令,实际上是对 kill() 函数的一个包装。
简而言之,Linux kill 命令可以将指定的信号发送至程序,将指定程序终止。
查看 kill 命令的使用语法,直接在 Linux 服务上执行 kill 命令即可查看。
[root@chenpihost ~]# kill
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
12
对于可选参数-s sigspec | -n signum | -sigspec
,说明如下:
- sigspec:信号声明
- signum:信号编号
那么信号声明和信号编号有哪些呢?可以使用kill -l
命令查看,如下所示:
[root@chenpihost ~]# kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
1234567891011121314
Linux 信号量(Linux Signals)的信号声明和信号编号相应关系以及解释如下表格。
Signal Name | Number | Description |
---|---|---|
SIGHUP | 1 | Hangup (POSIX) |
SIGINT | 2 | Terminal interrupt (ANSI) |
SIGQUIT | 3 | Terminal quit (POSIX) |
SIGILL | 4 | Illegal instruction (ANSI) |
SIGTRAP | 5 | Trace trap (POSIX) |
SIGIOT | 6 | IOT Trap (4.2 BSD) |
SIGBUS | 7 | BUS error (4.2 BSD) |
SIGFPE | 8 | Floating point exception (ANSI) |
SIGKILL | 9 | Kill(can’t be caught or ignored) (POSIX) |
SIGUSR1 | 10 | User defined signal 1 (POSIX) |
SIGSEGV | 11 | Invalid memory segment access (ANSI) |
SIGUSR2 | 12 | User defined signal 2 (POSIX) |
SIGPIPE | 13 | Write on a pipe with no reader, Broken pipe (POSIX) |
SIGALRM | 14 | Alarm clock (POSIX) |
SIGTERM | 15 | Termination (ANSI) |
SIGSTKFLT | 16 | Stack fault |
SIGCHLD | 17 | Child process has stopped or exited, changed (POSIX) |
SIGCONT | 18 | Continue executing, if stopped (POSIX) |
SIGSTOP | 19 | Stop executing(can’t be caught or ignored) (POSIX) |
SIGTSTP | 20 | Terminal stop signal (POSIX) |
SIGTTIN | 21 | Background process trying to read, from TTY (POSIX) |
SIGTTOU | 22 | Background process trying to write, to TTY (POSIX) |
SIGURG | 23 | Urgent condition on socket (4.2 BSD) |
SIGXCPU | 24 | CPU limit exceeded (4.2 BSD) |
SIGXFSZ | 25 | File size limit exceeded (4.2 BSD) |
SIGVTALRM | 26 | Virtual alarm clock (4.2 BSD) |
SIGPROF | 27 | Profiling alarm clock (4.2 BSD) |
SIGWINCH | 28 | Window size change (4.3 BSD, Sun) |
SIGIO | 29 | I/O now possible (4.2 BSD) |
SIGPWR | 30 | Power failure restart (System V) |
每一个信号量都有对应的信号声明和信号编号,比如9) SIGKILL
。那么我们可以使用下面任何一种命令来强制终止进程(假设进程 ID 为1760)。因为信号声明前缀都是 SIG ,所以也可以省略前缀。
kill -9 1760
kill -n 9 1760
kill -s SIGKILL 1760
kill -SIGKILL 1760
kill -KILL 1760
12345
如果没有显示指定具体的信号,默认是15) SIGTERM
。当程序接收到此信号后,程序会做停止前的处理工作,例如释放相应的资源,然后再停止程序,但是程序有可能会继续运行着。即 SIGTERM 信号是可以被阻塞的,可能被忽略的。
# 两种等效
kill 1755
kill -15 1755
123
使用 kill 命令终止一个进程,后面需要跟参数pid | jobspec ...
,可以是程序的 PID,PGID,或者工作编号等。
# 1755 是进程ID
kill 1755
12