# 一.进程相关

# 1.ps 命令

#查询进程的进程id,以及详细信息
 ps ef | grep java
1
2

# 2.jps 命令

查看 java 进程

jps
1

# 3.lsof 命令

lsof 命令用于列出当前系统中打开的文件和文件描述符。如果您希望查看特定进程的打开文件列表,可以使用以下命令:

lsof -p <进程ID>
1

<进程ID> 替换为您要查询的实际进程的进程 ID。这会显示与该进程相关的所有打开文件、网络连接等信息。

例如,如果要查看进程 ID 为 12345 的进程打开的文件列表,可以运行:

lsof -p 12345
1

请注意,您需要具有足够的权限来执行此命令,因为某些信息可能需要特定的权限才能访问。

# 4.kill 命令

#杀进程
kill -9 pid
1
2

在linux中 kill -2和kill -9的区别:

在 Linux 中,kill -2kill -9是两个不同的命令,用于向进程发送不同的信号。

  • kill -2(或kill -INT)发送的是 SIGINT 信号(中断信号)。这是一个软件中断信号,通常由终端按下 Ctrl+C 触发。这个信号告诉进程要求它终止执行,并且在默认情况下,进程会进行清理操作后正常退出。
  • kill -9(或kill -KILL)发送的是 SIGKILL 信号(强制终止信号)。这是一个不能被捕获、阻塞或忽略的信号,它会立即终止目标进程,无论它的状态如何。使用 SIGKILL 信号可以强制终止那些无法通过正常方式终止的进程,但它也不允许进程进行任何清理操作。

区别在于,kill -2发送的是中断信号,给予进程一个机会进行清理和正常退出。而kill -9发送的是强制终止信号,立即终止进程,不给予进程进行清理操作的机会。因此,通常情况下,建议首先尝试使用kill -2发送 SIGINT 信号,只有在进程无法响应或需要立即终止时才考虑使用kill -9发送 SIGKILL 信号。

请注意,在使用kill -9终止进程时,可能会导致进程未完成的操作无法正常关闭或数据丢失。因此,只有在必要时才应该使用kill -9

# 5.SIGINT:中断信号

SIGINT 是用户最常遇到的信号之一,通常与键盘上的Ctrl + C组合键相关联。以下是 SIGINT 的详细说明:

  • 信号名称:中断信号。
  • 发送源:用户通过键盘操作。
  • 目的:请求进程进行清理并安全退出。
  • 默认行为:终止进程的执行并退出。

SIGINT 是一种优雅的关闭请求,它允许进程在退出前执行必要的清理工作。例如,在文本编辑器中,SIGINT 可以用来中断当前的操作并退出编辑器;在服务器程序中,SIGINT 可以用来安全地关闭服务。

# 6.SIGHUP:挂起信号

SIGHUP 是另一种常见的信号,通常与终端的挂起或断开连接相关:

  • 信号名称:挂起信号。
  • 发送源:操作系统,当控制终端被挂起或连接断开时。
  • 目的:通知进程控制终端不再可用。
  • 默认行为:终止进程的执行并退出。

SIGHUP 通常用于通知进程其控制终端的状态发生了变化。例如,当用户从终端断开连接时,操作系统会向该终端上运行的所有进程发送 SIGHUP 信号。许多服务和守护进程会捕获 SIGHUP 信号,以便在控制终端断开后能够重新启动或进行其他形式的恢复。

# 7.localhost 和 0.0.0.0 对比

uvicorn.run(app=app, host="0.0.0.0", port=8080)和 uvicorn.run(app=app, host="127.0.0.1", port=8080) 区别

uvicorn.run(app=app, host="0.0.0.0", port=8080)uvicorn.run(app=app, host="127.0.0.1", port=8080) 这两行代码都是用来启动一个使用 Uvicorn 作为 ASGI 服务器的 FastAPI 应用,但它们在主机(host)配置上有所不同:

  1. host="0.0.0.0"

    • 这个设置意味着服务器将监听所有可用的网络接口。换句话说,任何能够访问服务器所在机器的 IP 地址的设备都能够连接到这个服务器。
    • 这通常用于生产环境中,当你希望你的应用对所有网络接口都可访问时。
  2. host="127.0.0.1"

    • 这个设置意味着服务器将只监听本地回环接口,也就是只有运行服务器的机器本身能够访问这个服务。
    • 这通常用于开发环境中,当你不希望外部设备能够访问你的服务器,或者你正在调试应用时。

简而言之,0.0.0.0 允许任何设备通过网络访问你的应用,而 127.0.0.1 只允许运行服务器的设备访问。在实际部署时,应该根据安全需求和访问控制来选择合适的主机设置。

# 二.端口相关

# 1.ss 命令

#查看端口
ss -ntlp
1
2

image-20230716103012348

# 2.ss 命令详解

ss(Socket Statistics)是一个用于显示关于网络套接字的统计信息的实用程序。它可以用来查看网络连接、监听端口、套接字状态等相关信息。在许多 Linux 系统中,ss 命令已经取代了较旧的 netstat 命令,因为它提供更多功能和更详细的信息。

以下是一些常用的 ss 命令选项和用法:

  1. 显示所有套接字信息:
ss
1
  1. 显示 TCP 连接信息:
ss -t
1
  1. 显示 UDP 连接信息:
ss -u
1
  1. 显示监听状态的套接字信息:
ss -l
1
  1. 显示指定端口的套接字信息:
ss -t -a 'sport = :<端口号>'
1
  1. 显示处于 ESTABLISHED 状态的连接:
ss -t state established
1
  1. 显示显示网络连接摘要:
ss -s
1
  1. 显示显示进程和套接字关联信息(需要 root 权限):
ss -p
1
  1. 以数值形式显示端口和 IP 地址:
ss -n
1
  1. 查看详细的套接字信息(包括 UID 和 PID 信息):
ss -e
1

这只是一些常见的用法示例,ss 命令有更多的选项和功能,可以根据您的需求进行进一步的探索和使用。在使用 ss 命令时,请确保您具有足够的权限来访问相关信息。

# 3.netstat

参数介绍:

netstat 网络连接信息,端口等信息 -a (all)显示所有选项,默认不显示 LISTEN 相关 -t (tcp)仅显示 tcp 相关选项 -u (udp)仅显示 udp 相关选项 -n 拒绝显示别名,能显示数字的全部转化成数字。 -l 仅列出有在 Listen (监听) 的服務状态

-p 显示建立相关链接的程序名 -r 显示路由信息,路由表 -e 显示扩展信息,例如 uid 等 -s 按各个协议进行统计 -c 每隔一个固定时间,执行该 netstat 命令。

提示:LISTEN 和 LISTENING 的状态只有用-a 或者-l 才能看到

基础用法:

#查看启动的端口方式(神器)
netstat -tunlp

#列出所有端口
netstat -a

#列出所有 tcp 端口
netstat -at

#列出所有 udp 端口
netstat -au

#只显示监听端口
netstat -l

#只列出所有监听 tcp 端口
netstat -lt

#只列出所有监听 udp 端口
netstat -lu

#只列出所有监听 UNIX 端口
netstat -lx

#查看各状态的连接数量
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

image-20230626141036447

查看端口号占用

#常用,端口被哪个应用占用
netstat -tunlp | grep 54321

#查询9200的占用情况
netstat -ntlp | grep 9200

#根据端口port查进程
netstat -nltp 8090

##查询92005601的占用情况
netstat -ntlp | grep -E '5601|9200'
1
2
3
4
5
6
7
8
9
10
11

根据pid查询:

#根据进程pid查端口:
netstat -nap | grep pid
1
2

# 4.中间件端口号

端口号 服务或用途
21 FTP(文件传输)协议代理服务器
22 SFTP、SSH、SCP、端口号重定向
23 Telnet(远程登录)协议代理服务器
25 SMTP Simple Mail Transfer Protocol(E-mail)
69 TFTP(Trivial File Transfer Protocol)
80 HTTP 服务器,木马 Executor 开放此端口
110 POP3 Post Office Protocol(E-mail)
443 HTTPS(securely transferring web pages)服务器
1080 SOCKS 代理协议服务器
7001 Weblogic 的默认端口
8080 JBOSS、TOMCAT、Oracle XDB 等默认端口

中间件:

端口号 服务或用途
1433 SqlServer 数据库 server 默认端口
1434 SqlServer 数据库 monitor 默认端口
1521 Oracle 数据库默认端口
3306 MySQL 默认端口
9092 Apache Kafka
5672 RabbitMQ Message Broker AMQP 服务端
15672 RabbitMQ 管理界面
9876 RocketMQ NameServer 端口
10911 RocketMQ TCP 端口
10909 RocketMQ 通信端口
6379 Redis 默认端口
9200 Elasticsearch Search Engine HTTP 端口
9300 Elasticsearch 节点通信
27017 MongoDB 默认端口
11211 Memcached 默认端口
8123 ClickHouse HTTP 端口号
9000 ClickHouse 默认的 TCP 端口
10000 Hive 端口号
4040 Spark Web UI 默认端口,用于监视应用程序进度和性能
6066 Spark Master Web UI 默认端口,用于监视集群状态
7077 Spark Standalone Master 默认端口,用于连接 Worker 节点
8080 Spark Master Web UI 默认端口,提供集群状态和监视
8081 Spark Worker Web UI 默认端口,提供单个 Worker 节点监视
8881 Spark Worker Web UI 默认端口,提供单个 Worker 节点监视
18080 Spark History Server 默认端口,用于查看应用程序历史
6060-6069 Spark 远程调试,默认端口范围,用于远程调试应用程序

Spring Cloud Alibaba:

组件 默认端口号
Nacos 服务发现 8848
Sentinel 限流熔断 8719
8720
Seata 分布式事务 8091
8092
8093
8094
8095
8096
8097
8098
RocketMQ 消息队列 9876
10911
10909
Dubbo RPC 框架 20880
20881
20882
20883
20884
20885

# 5.awk 命令

该命令将 ss -nltp | grep 8000 命令的输出作为输入,使用 awk 命令对其进行处理,其中 -F"[=,()]" 参数指定了分隔符为等号、逗号和括号。然后使用 {print $5} 打印第五个字段,即进程号(PID)的值。

这个命令将会输出 51470,即绑定在 8000 端口的进程的进程号(PID)值。

#打印pid的值
echo `ss -nltp | grep 8000 | awk -F"[=,()]" '{print $5}'`
ss -nltp | grep 8000 | awk -F"[=,()]" '{print $5}'

#打印pid的值
echo `ps -ef | grep 04_test_app | grep -v grep | awk '{print $2}'`
1
2
3
4
5
6

# 6.端口与应用

查看端口和进程号:

image-20230717174230153

根据docker-proxy查看docker

image-20230717174324089

# 7.端口占用

使用 lsofnetstat 命令来检查哪些进程正在占用 80 或 443 端口:

sudo lsof -i :80
sudo lsof -i :443
1
2

或者:

sudo netstat -tuln | grep :80
sudo netstat -tuln | grep :443
1
2

这些命令将列出占用端口的进程。如果发现其他服务(例如 Apache 或另一个 Nginx 实例)占用了这些端口,可以根据实际需求选择以下操作:

  • 停止占用这些端口的服务。
  • 将 Nginx 配置文件中的端口更改为未使用的端口。

# 8.aux 参数

ps aux | grep nginx 是一个 Linux 命令,用于在进程列表中查找与 nginx 相关的进程。下面是对这个命令的逐步解释:

  1. ps: 是用于显示系统中当前运行进程的命令。

    • ps 命令可以显示特定格式的进程信息,如进程 ID、内存使用率、CPU 使用率等。
  2. aux: 是 ps 命令的参数组合,表示显示所有进程的详细信息。

    • a: 显示所有用户的进程,包括其他用户的进程。
    • u: 以用户友好的格式显示进程信息(例如用户名、CPU 和内存使用情况等)。
    • x: 显示没有控制终端的进程(即系统后台的进程)。
  3. |: 管道操作符,用于将前一个命令的输出作为下一个命令的输入。

  4. grep nginx: grep 是一个用于搜索文本的工具,这里用来过滤 ps aux 的输出,只显示包含 nginx 的行。

综上,ps aux | grep nginx 命令的作用是:

  • 列出所有当前运行的进程,并过滤出与 nginx 相关的进程信息。

# 三.内存相关

# 1.free

#查看内存使用情况
free

#以M形式查看
free  -m

#内存用G显示
free -h
1
2
3
4
5
6
7
8

image-20221222134052463

# 2.前 8 内存

ps aux | head -1;ps aux |grep -v PID |sort -rn -k +4 | head -8
1

image-20221222134311191

# 3.top

内存总览

top
1

image-20221222134440448

# 4.查看内存

cat /proc/meminfo

grep MemTotal /proc/meminfo

grep MemTotal /proc/meminfo | cut -f2 -d:

free -m |grep "Mem" | awk '{print $2}'
1
2
3
4
5
6
7

image-20221201171745485

# 5.释放内存

释放前较好sync 一下,防止丢数据。

sync
1

清除缓冲的方法

echo 3 > /proc/sys/vm/drop_caches
1

# 6.buffer 和 cache

Linux 为了提升读写性能,会消耗一部分内存资源缓存磁盘数据,对于内核来说,buffer 和 cache 其实都属于已经被使用的内存。但当应用程序申请内存时,如果 free 内存不够,内核就会回收 buffer 和 cache 的内存来满足应用程序的请求。这就是稍后要说明的 buffer 和 cache。

  • cache 是存在于 cpu 和内存之间的缓冲区,存放的是从 disk 上读取到的数据
  • buff 是用于存放要输出到块存储的数据

# 四.CPU 和 IO

# 1.lscpu

lscpu
1

image-20221201171602857

# 2.cpuinfo

cat /proc/cpuinfo
1

image-20221222135821089

# 3.物理 cpu 个数

cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l
1

# 4.逻辑 cpu 个数

cat /proc/cpuinfo |grep "processor"|wc -l
1

# 5.cpu 主频

cat /proc/cpuinfo |grep MHz|uniq
1

# 6.查看 cpu 位数

#查看CPU位数(32 or 64)
getconf LONG_BIT

#打印操作系统位数
echo $HOSTTYPE

#查看
uname -a
1
2
3
4
5
6
7
8

# 7.cpu 使用排名

打印出最耗费 cpu 的进程程序

ps -eo pmem,pcpu,pid,args | tail -n +2|sort -rnk2 |head
1

# 8.iostat

iostat 主要用于输出磁盘 IO 和 CPU 的统计信息。

iostat 属于 sysstat 软件包。可以用 yum install sysstat 直接安装。

iostat [选项] [<时间间隔>] [<次数>]

#间隔1秒,总共显示5次
iostat 1 5

#每隔2,显示一次设备统计信息.
iostat -d 2

#每隔2,显示一次设备统计信息.总共输出3.
iostat -d 2 3

#每隔2秒显示一次sda, sdb两个设备的扩展统计信息,共输出3.
iostat -x sda sdb 2 3

#每隔2秒显示一次sda及上面所有分区的统计信息,共输出3.
iostat -p sda 2 3

#以M为单位显示所有信息
iostat -m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

命令参数:

  • -c: 显示 CPU 使用情况
  • -d: 显示磁盘使用情况

image-20221208151341604

cpu 属性值说明

  • **%user:**CPU 处在用户模式下的时间百分比。
  • **%nice:**CPU 处在带 NICE 值的用户模式下的时间百分比。
  • **%system:**CPU 处在系统模式下的时间百分比。
  • **%iowait:**CPU 等待输入输出完成时间的百分比。
  • **%steal:**管理程序维护另一个虚拟处理器时,虚拟 CPU 的无意识等待时间百分比。
  • **%idle:**CPU 空闲时间百分比。

备注:如果%iowait 的值过高,表示硬盘存在 I/O 瓶颈,%idle 值高,表示 CPU 较空闲,如果%idle 值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量。%idle 值如果持续低于 10,那么系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU。

disk 属性值说明:

  • **device:**磁盘名称
  • **tps:**每秒钟发送到的 I/O 请求数.
  • **Blk_read/s:**每秒读取的 block 数.
  • **Blk_wrtn/s:**每秒写入的 block 数.
  • **Blk_read:**读入的 block 总数.
  • **Blk_wrtn:**写入的 block 总数.

# 五.网络相关

# 1.指定端口登录

# 指定端口号登录
sshpass -p xxx ssh -A -g root@xxxx -p 1176
1
2

# 2.清空缓存

手动删除:

# 清空缓存,删除相关的ip
vim  ~/.ssh/known_hosts
1
2

脚本删除:

# 带上中括号
ssh-keygen -R [hostname_or_IP]

# 不带中括号
ssh-keygen -R hostname_or_IP
1
2
3
4
5

# 3.ip a 命令

输入 ip a,回车后会显示显示当前主机的网卡及对应 IP

image-20230308092430119

ip a 命令是在 Unix、Linux 等操作系统中用于显示网络接口和 IP 地址配置信息的命令。它可以提供关于网络接口、IP 地址、MAC 地址、网络状态等详细信息,对于配置网络、故障排除等都非常有用。

运行 ip a 命令会显示类似以下的输出:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
   inet 127.0.0.1/8 scope host lo
      valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
   inet 192.168.1.2/24 brd 192.168.1.255 scope global eth0
      valid_lft forever preferred_lft forever
1
2
3
4
5
6

在这个输出中,每个网络接口都有一个条目,其信息包括以下内容:

  • 1, 2: 接口编号,每个接口都有一个唯一的编号。
  • lo, eth0: 接口名称,例如,lo 表示回环(loopback)接口,eth0 表示以太网接口。
  • <...>: 接口状态标志,如 UP 表示接口处于启用状态,LOWER_UP 表示链路层连接已建立。
  • mtu: 最大传输单元(MTU),表示可以通过网络接口传输的最大数据包大小。
  • inet: IP 地址配置信息,包括 IP 地址和子网掩码。
  • brd: 广播地址,表示网络中的广播地址。
  • scope: 地址范围,例如 host 表示主机本身,global 表示全局地址。
  • valid_lft, preferred_lft: 地址的生存时间信息。

通过运行 ip a 命令,您可以获取有关系统上所有网络接口的详细信息,包括 IP 地址、状态、MAC 地址等,从而对网络配置进行监视和管理。

# 4.ssh 登录

ssh -p 22 root@120.78.213.67
1

# 5.curl 命令

# 请求信息
curl  www.baidu.com  -vl

# 详细输出信息
curl -v -X GET http://localhost:7118/csdn/autoAddView

# 带参数请求
curl -d "search=你是谁" "http://gpt.kube.moguit.cn/text"

# 设置代理
curl https://api.openai.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-xxx" \
  --proxy "http://127.0.0.1:7890" \
  -d '{
     "model": "gpt-3.5-turbo",
     "messages": [{"role": "user", "content": "Say this is a test!"}],
     "temperature": 0.7
   }'

# 保存相应到文件
curl -o response.txt -X GET http://localhost:7118/csdn/autoAddView

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# 6.ping 命令

#测试网络连通性
ping www.baidu.com
1
2

# 7.ifconfig

推荐使用 ip a 代替 ifconfig

#查看ip
ifconfig
1
2

# 8.telnet

检查域名是否是通的

telnet open-xxx-out-test.xxx.cn 443
1

# 9.域名解析

当涉及到网络连接时,/etc/resolv.conf 是一个非常重要的配置文件,通常在类 Unix 操作系统(如 Linux)中使用。它用于配置域名解析的设置,以便将域名解析为 IP 地址。以下是该文件的详细解释:

nameserver: 这是配置 DNS 服务器的地方。每行都以 "nameserver" 关键字开头,后面跟随一个 IP 地址,表示要使用的 DNS 服务器的地址。你可以在这里列出多个 DNS 服务器,以便在一个 DNS 服务器不可用时使用另一个。例如:

nameserver 8.8.8.8
nameserver 8.8.4.4
1
2

# 10.traceroute

traceroute(或tracert,在 Windows 系统中)是一种网络工具,用于跟踪数据包从源到目的地的路径,显示每一跳(hop)的延迟。这个工具可以帮助网络管理员和普通用户诊断网络问题,检测网络瓶颈,并确定数据包在网络中的路径。

当你运行traceroute时,它会发送一系列的数据包(通常使用 ICMP 或 UDP 协议)到目标地址,并记录每一跳的响应时间。以下是traceroute命令的基本语法:

在 Unix/Linux 系统中:

traceroute [目标地址]
1

在 Windows 系统中:

tracert [目标地址]
1

例如,如果你想跟踪到 Google 的服务器,可以运行以下命令:

在 Unix/Linux 系统中:

traceroute www.google.com
1

在 Windows 系统中:

tracert www.google.com
1

traceroute输出的结果显示了每一跳的 IP 地址和响应时间。通常,你会看到类似以下的输出:

1    <1 ms    <1 ms    <1 ms  your_router_IP
2     5 ms     5 ms     5 ms  ISP_router_IP
3     7 ms     7 ms     7 ms  destination_router_IP
1
2
3

每一行代表数据包经过的一个网络节点,显示了该节点的 IP 地址和响应时间。响应时间是从发送数据包到接收到响应所经过的时间,通常以毫秒为单位。

通过分析traceroute的输出,用户可以识别网络中的延迟、瓶颈和故障点,有助于排除网络问题。

# 六.Ping Curl Telnet

# 1.ping

# 1.Ping 定义

定义:Ping 是一个计算机网络工具,用于测试主机之间的连通性。它通过发送 ICMP(Internet Control Message Protocol)回显请求消息到目标主机,并等待回复来测量往返时间(RTT)和丢包率。

# 2.Ping 作用

作用

  • 测试主机之间的连接是否正常。
  • 测量网络延迟和丢包率。
  • 诊断网络故障。

# 3.Ping 原理

区别

  • Ping 发送 ICMP 消息,因此有时被防火墙或路由器配置所阻止。
  • Ping 只能测试到目标主机的连接状态,无法模拟实际应用数据的传输。

# 4.Ping 注意点

注意点

  • 部分网络环境或主机配置可能会禁止 Ping 请求。
  • 不同操作系统下 Ping 的命令参数可能有所不同。

# 5.Ping 使用示例

使用示例

ping example.com
ping -c 5 192.168.1.1
1
2

# 2.Curl

# 1.定义

定义:Curl 是一个命令行工具和库,用于传输数据,支持多种协议,包括 HTTP、HTTPS、FTP 等。它可以从各种网络资源(如网页、文件服务器等)下载或上传数据。

# 2.作用

作用

  • 从远程服务器获取数据或文件。
  • 在终端中模拟 HTTP 请求。
  • 支持各种协议,可用于多种用途。

# 3.区别

区别

  • Curl 支持多种协议,因此比 Ping 更灵活,可以模拟实际的网络请求。
  • Curl 可以执行 HTTP 请求,可以获取更多有关服务器响应的详细信息。

# 4.注意点

注意点

  • Curl 需要正确的 URL 和网络权限来访问远程资源。
  • 可以使用-c 参数指定用户代理来模拟不同的客户端。

# 5.使用示例

使用示例

curl https://example.com
curl -O http://example.com/file.txt
1
2

# 3.Telnet

# 1.定义

定义:Telnet 是一个用于远程登录到主机的网络协议和命令行工具。它允许用户通过网络连接到远程主机,并在远程主机上执行命令或操作。

# 2.作用

作用

  • 远程登录到主机,执行命令或操作。
  • 诊断网络服务,测试端口连接。

# 3.区别

区别

  • Telnet 允许用户与远程主机进行交互,可以执行命令和操作。
  • Telnet 使用明文传输,安全性较低,现在通常被 SSH 所取代。

# 4.注意点

注意点

  • 使用 Telnet 时,传输的数据是明文的,可能会被窃听,不应在不安全的网络环境中使用。
  • 部分系统可能默认不启用 Telnet 服务。

# 5.使用示例

使用示例

telnet example.com 80
telnet 192.168.1.1
1
2

综上所述,Ping、Curl 和 Telnet 是三种常用的网络工具,各自具有不同的功能和用途。使用时需要根据实际需求选择合适的工具,并注意网络安全和权限问题。

# 七.kill 命令

# 1. kill 命令简介

kill 命令是发送信号给进程的一种方式。在 Linux 中,进程间通信(IPC)可以通过多种方式进行,信号是一种简单快速的通信机制。信号可以由操作系统在特定事件发生时自动发送,也可以由用户通过命令行手动发送。

# 2. 基本语法

kill 命令的基本语法如下:

kill [选项] PID...
1

其中,PID 是进程的 ID,可以是一个或多个进程 ID。

# 3. 发送信号

默认情况下,kill 命令发送 SIGTERM(信号 15),这是一个让进程可以优雅退出的信号。如果进程没有捕获这个信号,它将被终止。用户也可以指定其他信号,例如:

kill -SIGKILL PID
1

SIGKILL(信号 9)是一个强制终止进程的信号,进程无法捕获或忽略它。

# 4. 信号列表

Linux 中有许多预定义的信号,以下是一些常见的信号:

  • SIGINT(信号 2):中断,通常由 Ctrl+C 产生。
  • SIGTERM(信号 15):终止,可以被进程捕获并优雅退出。
  • SIGKILL(信号 9):杀死,强制终止进程,无法被进程捕获或忽略。
  • SIGSTOP(信号 19):停止,暂停进程,无法被进程捕获、忽略或由用户发送。
  • SIGCONT(信号 18):继续,继续一个被停止的进程。

# 5. 使用场景

  • 优雅退出:当需要安全关闭应用程序时,可以使用 SIGTERM
  • 强制终止:如果进程无法响应或需要立即停止,可以使用 SIGKILL
  • 暂停和继续:对于需要暂时挂起的进程,可以使用 SIGSTOPSIGCONT

# 6. 进阶技巧

  • 使用 pkillkillall:这些命令可以基于进程名而不是 PID 来发送信号。
  • 使用 nohup:当需要忽略 SIGHUP 信号(信号 1)时,可以使用 nohup 命令运行进程。
  • 使用 trap 命令:在 shell 脚本中,可以使用 trap 命令捕获信号并执行特定的操作。
上次更新: 10/29/2024, 10:27:50 AM