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 &
Linux 教程 Linux 用户 Linux 基础命令 Linux 文件权限 Linux 文件查找 Linux 文件归档 Linux vim Linux 管道和重定向 Linux 进程 Linux 运行状态 Linux 服务管理 Linux 定时任务 Linux 磁盘 Linux LVM Linux 网络配置 Linux 软件管理 Linux iptables Linux SSH Linux curl