Linux 进程

ps aux

该命令可以列出当前正在运行的进程。

$ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.7 188912  1900 ?        Ss   Jul09   0:52 init -z
root         2  0.0  0.0      0     0 ?        S    Jul09   0:00 [kthreadd/319573]
root         3  0.0  0.0      0     0 ?        S    Jul09   0:00 [khelper/319573]
root        55  0.0  0.0  41632   136 ?        Ss   Jul09   0:05 /lib/systemd/systemd-udevd
root        56  0.0  0.4  28664  1152 ?        Ss   Jul09   1:03 /lib/systemd/systemd-journald
root       125  0.0  0.1  47568   320 ?        Ss   Jul09   0:10 /sbin/rpcbind -f -w
root       255  0.0  0.1  65452   336 ?        Ss   Jul09   0:24 /usr/sbin/sshd -D
mysql      269  0.0  0.3 1158712  916 ?        Ssl  Jul09  80:22 /usr/sbin/mysqld
root       276  0.0  0.0  12780     8 tty2     Ss+  Jul09   0:00 /sbin/agetty --noclear tty2 linux
root       277  0.0  0.0  12780     8 tty1     Ss+  Jul09   0:00 /sbin/agetty --noclear --keep-baud console 115200 38400 9600 vt220
root       278  0.0  0.0 124920     4 ?        Ss   Jul09   0:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data   279  0.0  0.4 125644  1136 ?        S    Jul09   0:35 nginx: worker process
root       458  0.0 26.5 131664 69716 ?        Ss   Jul09  42:40 /usr/bin/python3 /usr/local/bin/ssserver -c /etc/ssserver.json -d start
root     24005  0.0  1.5  90396  3972 ?        Ss   21:05   0:00 sshd: root@pts/1
root     24014  0.0  0.8  18368  2200 pts/1    Ss   21:05   0:00 -bash
root     24076  0.0  0.5  34368  1536 pts/1    R+   21:10   0:00 ps aux

这些信息所代表的含义如下。

  • USER 表示该进程所属的用户。
  • PID 进程编号。
  • %CPU 使用 CPU 资源百分比。
  • %MEM 内存占用率
  • VSZ 最大可以占用多少内存。
  • RSS 以使用了多少内存。
  • TTY 终端。
  • STAT 进程的状态,总共有几种状态。D 不可中断、R 运行中、S 终端、T 停止、Z 僵死。
  • START 进程启动时间。
  • TIME 进程运行时间。
  • COMMAND 启动进程的命令。

搜索进程

egrep 命令可以从文本中匹配相应的字符,然后返回相应字符的整行。这里我们就可以利用 管道 的概念,把 pa aux 的输出,变成 egrep 命令的输入,然后搜索我们想要的目标进程。

$ ps aux | egrep mysql // 找到 mysql 相关的进程
mysql      269  0.0  0.3 1158712  916 ?        Ssl  Jul09  80:23 /usr/sbin/mysqld // 这个就 mysql 的主进程,这样我们就拿到了进程号 269
root     24123  0.0  0.3  11228   928 pts/3    S+   21:27   0:00 grep -E --color=auto mysql

kill

终止进程。

kill pid // 例如 kill 269 终止 mysql 进程

有时候一些进程有相关的依赖,会终止不了,那么可以加个参数 kill -9 pid 强行终止进程。


tty

每一个黑乎乎的窗口,就代表了一个 终端,Linux 其实给我们提供了多个连接终端,让我们可以操作多任务,不同终端的切换使用 ctrl F1 ~ F6 快捷键,总共有 6 个。在每一个终端上面,我们能登陆不一样的用户,操作不一样的任务。


job

那么在一个终端上面,也能够使用多任务吗?其实也是可以的。在 Linux 系统内部也内置了一套这样的 job 机制,让我们可以把任务放到后台运行,假设执行多个任务可以通过这些任务的编号来回切换。

我们使用 ping 命令,这时整个终端就被这个任务完全的占用了。

$ ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.079 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.105 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.101 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.090 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.054 ms
...

我们只需要按下 ctrl + z 就能让 ping 这个任务变成一个后台任务。同时,它会返回后台的任务信息。

[1]  + 1243 continued  ping 127.0.0.1

[1] 就是该任务的编号。


如何把后台的任务切换到前台?需要使用 fg 命令。

fg %1

守护进程

有些服务我们是永远也不用在前台运行的,只要它默默的在后台呆着,那么只要使用 nohup cmd & 执行它,它就会运行在后台。

nohup ping 127.0.0.1 &
更多教程 HTML5 教程 CSS3 教程 JavaScript 教程 JQuery 教程 React.js 教程 Node.js 教程 Koa2 教程 Python 教程 Linux 教程