Linux 实用操作之进程管理

5 minute

查看所有进程

ps -ef

  • -e : all processes (-A)
  • -f : full-format, including command lines
1[root@VM-0-11-centos ~]# ps -ef | head -n 1
2UID PID PPID C STIME TTY TIME CMD

解释如下:

  • PPID 父进程ID
  • C 占用CPU百分比
  • STIME 就是"start time"
  • TTY 进程在哪个终端显示
  • CMD 命令的名称和参数

ps aux

  • a: all with tty, including other users (和-a是不同的)
  • u: user-oriented format
  • x: processes without controlling ttys
1[root@VM-0-11-centos ~]# ps -aux | head -n 1
2USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

解释如下:

  • %MEM 占用内存百分比
  • VSZ 该进程使用的虚拟內存量(KB)
  • RSS 该进程占用的固定內存量(KB)(驻留中页的数量)
  • STAT 进程状态

STAT状态位常见的状态字符有:

1D      //无法中断的休眠状态(通常 IO 的进程); 
2R      //正在运行可中在队列中可过行的; 
3S      //处于休眠状态; 
4T      //停止或被追踪; 
5Z      //僵尸进程; 
6s      //进程的领导者(在它之下有子进程); 
7l      //多线程,克隆线程(使用 CLONE_THREAD, 类似 NPTL pthreads); 
8+      //位于后台的进程组;

查看相关进程

1[root@VM-0-11-centos ~]# ps -ef | head -n 1; ps -ef | grep java
2UID        PID  PPID  C STIME TTY          TIME CMD
3root     25889 24972  4 17:46 pts/1    00:00:11 java -jar LonersHub-0.0.1-SNAPSHOT.jar
4root     26558 24972  0 17:51 pts/1    00:00:00 grep --color=auto java

终止或重启进程

关于kill命令

kill用于想某个进程发送信号。

列出所有序号代表的信号含义:

1[root@VM-0-11-centos ~]# kill -l
2 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP      6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL ......

最常用的信号是:

  • 1 (SIGHUP):重新加载进程。

  • 9 (SIGKILL):杀死一个进程。

  • 15 (SIGTERM):正常停止一个进程。

默认不带信号序号的kill就是SIGTERM,SIGTERM可以被阻塞、处理和忽略,因此有的进程可能无法按预期的结束。

关于killall命令

无需PID,通过指定的名称进行对应进程的kill操作。

killall [-iIe] -signal 指令名称

-i: interactive, 互动式kill

停止进程

  1. 获取相关进程PID,再通过kill终止占用该端口的程序:
1kill -9 PID

更快捷的方式:(根据某个名称进行操作,可能导致错误,因为多个进程可能含有相同名称,慎用。)

1kill -9 `ps -ef | grep ins | grep -v color | awk '{print $2}'`
  1. 通过相关名称kill

e.g. 依次询问每个htppd相关程序是否需要被终止

1killall -i -9 httpd

背景工作切换

  1. 观察当前工作状态: jobs

jobs -l 可同时列出PID。

  1. 将背景工作拿到前景来处理:fg %jobnumber

  2. 让工作运行在背景:bg &jobnumber

e.g.

当按下 ctrl-z 将 vim 工作放到背景后,默认情况下,vim 工作将处于 “Stpped” 状态,使用 bg 开始运行。

plus: & 将工作放到背景“执行”。

离线管理进程

1nohub {cmd} &

不打印日志:

1nohup {cmd} >/dev/null 2>&1 &

/dev/null类似于回收站,只是无法像window的回收站一样恢复。

>/dev/null,就是把标准输出(1)写到/dev/null

对于2>&1

我们知道,1 代表标准输出,而 2 代表标准错误输出,而 0 代表标准输入,这里就是将标准错误输出重定向到标准输出,这样也让标准错误输出写到了 /dev/null