文章目录
- 使用命令 lsof 查看某个端口的使用情况
- 使用命令 netstat 查看某个端口的使用情况
- 使用命令 ps 查看指定进程的信息
- (一)命令:ps auwx | grep sshd
- (二)命令:ps -ef | grep ssh
- (三)命令:ps -Al | grep ssh
 
- 使用命令 top 实时显示进程状态
- 使用命令 kill 杀掉进程
- 启动/停止/重启进程
使用命令 lsof 查看某个端口的使用情况
[~]$ sudo lsof -P -i tcp:8080
COMMAND  PID         USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
java    3933 liaowenxiong   50u  IPv6 0x72b25e6efd433f4b      0t0  TCP *:8080 (LISTEN)[~]$ sudo lsof -P -i:8080 # 
COMMAND  PID         USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
java    3933 liaowenxiong   50u  IPv6 0x72b25e6efd433f4b      0t0  TCP *:8080 (LISTEN)
选项说明:
 sudo 表示以 root 的权限执行
 -i 表示列出符合条件的且与网络相关的进程
 -P 表示不解析端口号,直接显示端口号,而不是显示端口名称
字段说明:
| 字段名称 | 说明 | 
|---|---|
| COMMAND | 使用端口的进程的名称,默认以 9 个字符长度显示的命令名称。可使用 +c参数指定显示的宽度,若+c后跟的参数为零,则显示命令的全名。这个+c参数好像无效 | 
| PID | 进程标识符 | 
| PPID | 父进程标识符,父进程的IP号,默认不显示,当使用 -R参数可打开。 | 
| USER | 进程所有者,命令的执行 UID 或系统中登陆的用户名称。默认显示为用户名,当使用 -l参数时,可显示 UID。 | 
| PGID | 进程所属组标识符,进程组的ID 编号,默认也不会显示,当使用 -g参数时可打开。 | 
| FD | File Descriptor Number,文件描述符,应用程序通过文件描述符识别文件,例如:cwd、txt 等 | 
| TYPE | 文件类型,例如: DIR、REG 等 | 
| DEVICE | 指定磁盘的名称,以逗号分隔设备编号,使用character special、block special表示的设备号 | 
| SIZE | 文件的大小,如果不能用大小表示的,会留空。使用-s参数控制。 | 
| NODE | 索引节点(文件在磁盘上的标识),本地文件的node码,或者协议,如TCP等 | 
| NAME | 打开文件的确切名称,挂载点和文件的全路径(链接会被解析为实际路径),或者连接双方的地址和端口、状态等 | 
| LISTEN | 代表该进程正处于监听状态,即该进程处于活跃中 | 
关于命令 lsof 的用法说明,请点击查看文章《Linux 命令之 lsof – 列出当前系统已打开的文件列表》
使用命令 netstat 查看某个端口的使用情况
[~]$ netstat -nat | grep 8080
Proto Recv-Q  Send-Q Local Address         Foreign Address         State
tcp46      0      0  *.8080                 *.*                    LISTEN [~]$ netstat -anp tcp | grep 8080
tcp46      0      0  *.8080                 *.*                    LISTEN   [~]$ netstat -AaLlnW                
Current listen queue sizes (qlen/incqlen/maxqlen)
Socket           Flowhash Listen         Local Address                          
72b25e6ee785488b        0 0/0/128        *.56530                                       
72b25e6ef1269023        0 0/0/128        *.56530                                       
72b25e6ee7852d0b        0 0/0/1          127.0.0.1.8005                                
72b25e6efd433f4b        0 0/0/100        *.8080                                                                                   
选项说明:
-a 显示所有连线中的 Socket 的状态
 -n 直接使用 ip 地址,而不通过域名服务器
 -t 显示 TCP 传输协议的连线状况
 -p 显示正在使用 Socket 的程序识别码和程序名称
 -A 默认显示时,显示与套接字关联的任何协议控制块的地址和流散列;用于调试。
 -L 显示各种侦听队列的大小。第一个计数显示不可接受的连接数。第二个计数显示不可接受的不完整连接的数量。第三个计数是排队连接的最大数量。
 -l 打印完整的IPv6地址。
 -n 将网络地址显示为数字(通常netstat解释地址并尝试以符号方式显示它们)。此选项可用于任何显示格式。
 -W 在某些显示中,避免截断地址,即使这会导致某些字段溢出。
列说明:
Proto 连接使用的协议
 Recv-Q 和 Send-Q 指接收队列和发送队列,这些数字一般都应该是 0。如果不是则表示软件包正在队列中堆积。这种情况只能在非常少的情况见到。
 Local Address 本地机器名和本地打开并用于连接的端口
 Foreign Address 远程机器名和端口
 State 显示套接口当前的状态。
| 状态 | 说明 | 
|---|---|
| LISTEN | 侦听来自远方的TCP端口的连接请求 | 
| SYN-SENT | 再发送连接请求后等待匹配的连接请求(如果有大量这样的状态包,检查是否中招了) | 
| SYN-RECEIVED | 再收到和发送一个连接请求后等待对方对连接请求的确认(如有大量此状态,估计被flood攻击了) | 
| ESTABLISHED | 代表一个打开的连接 | 
| FIN-WAIT-1 | 等待远程TCP连接中断请求,或先前的连接中断请求的确认 | 
| FIN-WAIT-2 | 从远程TCP等待连接中断请求 | 
| CLOSE-WAIT | 等待从本地用户发来的连接中断请求 | 
| CLOSING | 等待远程TCP对连接中断的确认 | 
| LAST-ACK | 等待原来的发向远程TCP的连接中断请求的确认(不是什么好东西,此项出现,检查是否被攻击) | 
| TIME-WAIT | 等待足够的时间以确保远程TCP接收到连接中断请求的确认 | 
| CLOSED | 没有任何连接状态 | 
使用命令 ps 查看指定进程的信息
(一)命令:ps auwx | grep sshd
查看 sshd 相关的进程:
liaowenongdeair:etc root# ps auwx|grep sshd
root              1987   1.0  0.0  4285816    724 s000  S+    2:37下午   0:00.00 grep sshdliaowenongdeair:etc root# ps auwx|grep ssh
root              2158   0.0  0.0  4259000    228 s000  R+    3:30下午   0:00.00 grep ssh
root              1982   0.0  0.0  4280264    192   ??  Ss    2:35下午   0:00.00 ssh-agent
liaowenxiong       934   0.0  0.0  4289736   1336   ??  S     8:49上午   0:00.04 /usr/bin/ssh-agent -l
从结果来看,根本查找不到 sshd 进程。
命令说明:
- a显示现行终端机下的所有程序,包括其他用户的程序
- u以用户为主的格式来显示程序状况
- w采用宽阔的格式来显示程序状况
- x显示所有程序,不以终端机来区分
结果说明:
 第 1 列:进程所属用户,列名:USER,-- root
 第 2 列:进程号,列名:PID,-- 1987
 第 3 列:使用掉的 CPU 资源百分比,列名:%CPU,-- 1.0
 第 4 列:所占用的物理内存百分比,列名:%MEM,-- 0.0
 第 5 列:使用掉的虚拟内存量,列名:VSZ,-- 4285816
 第 6 列:固定占用的内存量,列名:RSS,-- 724
 第 7 列:登陆者的终端机位置,列名:TTY,-- s000
 第 8 列:进程目前的状态,列名:STAT,-- S+,后面的加号 + 说明进程是“在前台进程组”,也就是进程可以使用键盘输出
 第 9 列:进程被触发启动的时间,列名:START,-- 2:37下午
 第 10 列:进程实际使用 CPU 运作的时间,列名:TIME,-- 0:00.00
 第 11 列:该进程实际的命令,列名:COMMAND,-- grep sshd
liaowenxiongdeMacBook-Air:~ liaowenxiong$ ps -ef | grep ssh501   934     1   0 六08上午 ??         0:00.05 /usr/bin/ssh-agent -l0  1982     1   0 六02下午 ??         0:00.00 ssh-agent501 22930 22923   0 四03下午 ttys000    0:01.99 ssh root@47.114.59.224501 27379 27219   0  5:47下午 ttys001    0:00.00 grep ssh
(二)命令:ps -ef | grep ssh
查看 ssh 相关的进程:
liaowenongdeair:etc root# ps -ef|grep ssh501   934     1   0  8:49上午 ??         0:00.04 /usr/bin/ssh-agent -l0  1982     1   0  2:35下午 ??         0:00.00 ssh-agent
命令说明:
- -e显示所有进程
- -f显示- uid,- ppip,- c与- stime栏位
结果说明:
 第 1 列:进程所属用户的 ID,列名:UID
 第 2 列:进程 ID,列名:PID
 第 3 列:父进程的 ID,列名:PPID
 第 4 列:CPU 资源使用百分比,列名:C
 第 5 列:进程被触发启动的时间,列名:STIME
 第 6 列:启动进程的终端机位置,列名:TTY,? 表示与终端机无关
 第 7 列:实际使用 CPU 运作的时间,单位秒,列明:TIME
 第 8 列:进程的命令,列名:COMMAND
(三)命令:ps -Al | grep ssh
查看与 ssh 相关的进程的详细信息:
liaowenongdeair:bin root# ps -Al | grep ssh501   934     1     4144   0  20  0  4289736    948 -      S                   0 ??         0:00.04 /usr/bin/ssh-agent -l0  1982     1       44   0  31  0  4280264    160 -      Ss                  0 ??         0:00.00 ssh-agent0 15372  1638     4006   0  31  0  4268408    684 -      S+                  0 ttys000    0:00.00 grep ssh501  9961  6327     4006   0  31  0  4298388   1904 -      S+                  0 ttys001    0:02.80 ssh root@47.114.59.224
说明:
- -l采用详细的格式来显示程序状况
- -A显示所有程序,和选项- -e相同
预知更多关于命令 ps 的使用介绍,请点击查看文章《Linux 命令之 ps – 显示进程状态》
疑问:在 MacOS 下使用命令 ps,根本无法得知进程是否启动,因为看不到相关进程的信息。奇怪!!!
使用命令 top 实时显示进程状态
使用命令 top 可以查看所有进程的实时状态,关于命令 top 的用法说明,请点击查看文章《Linux 命令之 top 命令-实时显示进程动态》
关于排序:
先输入 o,然后输入 cpu 则按 cpu 使用量排序,输入 rsize 则按内存使用量排序。
使用命令 kill 杀掉进程
liaowenxiongdeMacBook-Air:~ liaowenxiong$ sudo kill -9 PID
说明:-9 表示强制杀掉进程
关于命令 kill 的用法说明,请点击查看文章《Linux 命令之 kill – 杀死进程》
启动/停止/重启进程
请查看文章《MacOS 关于启动/停止/重启进程的命令》