# 一.进程相关
# 1.ps 命令
#查询进程的进程id,以及详细信息
ps ef | grep java
2
# 2.jps 命令
查看 java 进程
jps
# 3.lsof 命令
lsof
命令用于列出当前系统中打开的文件和文件描述符。如果您希望查看特定进程的打开文件列表,可以使用以下命令:
lsof -p <进程ID>
将 <进程ID>
替换为您要查询的实际进程的进程 ID。这会显示与该进程相关的所有打开文件、网络连接等信息。
例如,如果要查看进程 ID 为 12345 的进程打开的文件列表,可以运行:
lsof -p 12345
请注意,您需要具有足够的权限来执行此命令,因为某些信息可能需要特定的权限才能访问。
# 4.kill 命令
#杀进程
kill -9 pid
2
在linux中 kill -2和kill -9的区别:
在 Linux 中,kill -2
和kill -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)配置上有所不同:
host="0.0.0.0"
:- 这个设置意味着服务器将监听所有可用的网络接口。换句话说,任何能够访问服务器所在机器的 IP 地址的设备都能够连接到这个服务器。
- 这通常用于生产环境中,当你希望你的应用对所有网络接口都可访问时。
host="127.0.0.1"
:- 这个设置意味着服务器将只监听本地回环接口,也就是只有运行服务器的机器本身能够访问这个服务。
- 这通常用于开发环境中,当你不希望外部设备能够访问你的服务器,或者你正在调试应用时。
简而言之,0.0.0.0
允许任何设备通过网络访问你的应用,而 127.0.0.1
只允许运行服务器的设备访问。在实际部署时,应该根据安全需求和访问控制来选择合适的主机设置。
# 二.端口相关
# 1.ss 命令
#查看端口
ss -ntlp
2
# 2.ss 命令详解
ss
(Socket Statistics)是一个用于显示关于网络套接字的统计信息的实用程序。它可以用来查看网络连接、监听端口、套接字状态等相关信息。在许多 Linux 系统中,ss
命令已经取代了较旧的 netstat
命令,因为它提供更多功能和更详细的信息。
以下是一些常用的 ss
命令选项和用法:
- 显示所有套接字信息:
ss
- 显示 TCP 连接信息:
ss -t
- 显示 UDP 连接信息:
ss -u
- 显示监听状态的套接字信息:
ss -l
- 显示指定端口的套接字信息:
ss -t -a 'sport = :<端口号>'
- 显示处于 ESTABLISHED 状态的连接:
ss -t state established
- 显示显示网络连接摘要:
ss -s
- 显示显示进程和套接字关联信息(需要 root 权限):
ss -p
- 以数值形式显示端口和 IP 地址:
ss -n
- 查看详细的套接字信息(包括 UID 和 PID 信息):
ss -e
这只是一些常见的用法示例,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]}'
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
查看端口号占用
#常用,端口被哪个应用占用
netstat -tunlp | grep 54321
#查询9200的占用情况
netstat -ntlp | grep 9200
#根据端口port查进程
netstat -nltp 8090
##查询9200和5601的占用情况
netstat -ntlp | grep -E '5601|9200'
2
3
4
5
6
7
8
9
10
11
根据pid查询:
#根据进程pid查端口:
netstat -nap | grep pid
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}'`
2
3
4
5
6
# 6.端口与应用
查看端口和进程号:
根据docker-proxy查看docker
# 7.端口占用
使用 lsof
或 netstat
命令来检查哪些进程正在占用 80 或 443 端口:
sudo lsof -i :80
sudo lsof -i :443
2
或者:
sudo netstat -tuln | grep :80
sudo netstat -tuln | grep :443
2
这些命令将列出占用端口的进程。如果发现其他服务(例如 Apache 或另一个 Nginx 实例)占用了这些端口,可以根据实际需求选择以下操作:
- 停止占用这些端口的服务。
- 将 Nginx 配置文件中的端口更改为未使用的端口。
# 8.aux 参数
ps aux | grep nginx
是一个 Linux 命令,用于在进程列表中查找与 nginx
相关的进程。下面是对这个命令的逐步解释:
ps
: 是用于显示系统中当前运行进程的命令。ps
命令可以显示特定格式的进程信息,如进程 ID、内存使用率、CPU 使用率等。
aux
: 是ps
命令的参数组合,表示显示所有进程的详细信息。a
: 显示所有用户的进程,包括其他用户的进程。u
: 以用户友好的格式显示进程信息(例如用户名、CPU 和内存使用情况等)。x
: 显示没有控制终端的进程(即系统后台的进程)。
|
: 管道操作符,用于将前一个命令的输出作为下一个命令的输入。grep nginx
:grep
是一个用于搜索文本的工具,这里用来过滤ps aux
的输出,只显示包含nginx
的行。
综上,ps aux | grep nginx
命令的作用是:
- 列出所有当前运行的进程,并过滤出与
nginx
相关的进程信息。
# 三.内存相关
# 1.free
#查看内存使用情况
free
#以M形式查看
free -m
#内存用G显示
free -h
2
3
4
5
6
7
8
# 2.前 8 内存
ps aux | head -1;ps aux |grep -v PID |sort -rn -k +4 | head -8
# 3.top
内存总览
top
# 4.查看内存
cat /proc/meminfo
grep MemTotal /proc/meminfo
grep MemTotal /proc/meminfo | cut -f2 -d:
free -m |grep "Mem" | awk '{print $2}'
2
3
4
5
6
7
# 5.释放内存
释放前较好sync
一下,防止丢数据。
sync
清除缓冲的方法
echo 3 > /proc/sys/vm/drop_caches
# 6.buffer 和 cache
Linux 为了提升读写性能,会消耗一部分内存资源缓存磁盘数据,对于内核来说,buffer 和 cache 其实都属于已经被使用的内存。但当应用程序申请内存时,如果 free 内存不够,内核就会回收 buffer 和 cache 的内存来满足应用程序的请求。这就是稍后要说明的 buffer 和 cache。
cache
是存在于 cpu 和内存之间的缓冲区,存放的是从 disk 上读取到的数据buff
是用于存放要输出到块存储的数据
# 四.CPU 和 IO
# 1.lscpu
lscpu
# 2.cpuinfo
cat /proc/cpuinfo
# 3.物理 cpu 个数
cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l
# 4.逻辑 cpu 个数
cat /proc/cpuinfo |grep "processor"|wc -l
# 5.cpu 主频
cat /proc/cpuinfo |grep MHz|uniq
# 6.查看 cpu 位数
#查看CPU位数(32 or 64)
getconf LONG_BIT
#打印操作系统位数
echo $HOSTTYPE
#查看
uname -a
2
3
4
5
6
7
8
# 7.cpu 使用排名
打印出最耗费 cpu 的进程程序
ps -eo pmem,pcpu,pid,args | tail -n +2|sort -rnk2 |head
# 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
命令参数:
- -c: 显示 CPU 使用情况
- -d: 显示磁盘使用情况
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
2
# 2.清空缓存
手动删除:
# 清空缓存,删除相关的ip
vim ~/.ssh/known_hosts
2
脚本删除:
# 带上中括号
ssh-keygen -R [hostname_or_IP]
# 不带中括号
ssh-keygen -R hostname_or_IP
2
3
4
5
# 3.ip a 命令
输入 ip a,回车后会显示显示当前主机的网卡及对应 IP
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
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
# 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
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
2
# 7.ifconfig
推荐使用 ip a 代替 ifconfig
#查看ip
ifconfig
2
# 8.telnet
检查域名是否是通的
telnet open-xxx-out-test.xxx.cn 443
# 9.域名解析
当涉及到网络连接时,/etc/resolv.conf
是一个非常重要的配置文件,通常在类 Unix 操作系统(如 Linux)中使用。它用于配置域名解析的设置,以便将域名解析为 IP 地址。以下是该文件的详细解释:
nameserver: 这是配置 DNS 服务器的地方。每行都以 "nameserver" 关键字开头,后面跟随一个 IP 地址,表示要使用的 DNS 服务器的地址。你可以在这里列出多个 DNS 服务器,以便在一个 DNS 服务器不可用时使用另一个。例如:
nameserver 8.8.8.8
nameserver 8.8.4.4
2
# 10.traceroute
traceroute
(或tracert
,在 Windows 系统中)是一种网络工具,用于跟踪数据包从源到目的地的路径,显示每一跳(hop)的延迟。这个工具可以帮助网络管理员和普通用户诊断网络问题,检测网络瓶颈,并确定数据包在网络中的路径。
当你运行traceroute
时,它会发送一系列的数据包(通常使用 ICMP 或 UDP 协议)到目标地址,并记录每一跳的响应时间。以下是traceroute
命令的基本语法:
在 Unix/Linux 系统中:
traceroute [目标地址]
在 Windows 系统中:
tracert [目标地址]
例如,如果你想跟踪到 Google 的服务器,可以运行以下命令:
在 Unix/Linux 系统中:
traceroute www.google.com
在 Windows 系统中:
tracert www.google.com
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
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
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
2
# 3.Telnet
# 1.定义
定义:Telnet 是一个用于远程登录到主机的网络协议和命令行工具。它允许用户通过网络连接到远程主机,并在远程主机上执行命令或操作。
# 2.作用
作用:
- 远程登录到主机,执行命令或操作。
- 诊断网络服务,测试端口连接。
# 3.区别
区别:
- Telnet 允许用户与远程主机进行交互,可以执行命令和操作。
- Telnet 使用明文传输,安全性较低,现在通常被 SSH 所取代。
# 4.注意点
注意点:
- 使用 Telnet 时,传输的数据是明文的,可能会被窃听,不应在不安全的网络环境中使用。
- 部分系统可能默认不启用 Telnet 服务。
# 5.使用示例
使用示例:
telnet example.com 80
telnet 192.168.1.1
2
综上所述,Ping、Curl 和 Telnet 是三种常用的网络工具,各自具有不同的功能和用途。使用时需要根据实际需求选择合适的工具,并注意网络安全和权限问题。
# 七.kill 命令
# 1. kill
命令简介
kill
命令是发送信号给进程的一种方式。在 Linux 中,进程间通信(IPC)可以通过多种方式进行,信号是一种简单快速的通信机制。信号可以由操作系统在特定事件发生时自动发送,也可以由用户通过命令行手动发送。
# 2. 基本语法
kill
命令的基本语法如下:
kill [选项] PID...
其中,PID
是进程的 ID,可以是一个或多个进程 ID。
# 3. 发送信号
默认情况下,kill
命令发送 SIGTERM
(信号 15),这是一个让进程可以优雅退出的信号。如果进程没有捕获这个信号,它将被终止。用户也可以指定其他信号,例如:
kill -SIGKILL PID
SIGKILL
(信号 9)是一个强制终止进程的信号,进程无法捕获或忽略它。
# 4. 信号列表
Linux 中有许多预定义的信号,以下是一些常见的信号:
SIGINT
(信号 2):中断,通常由 Ctrl+C 产生。SIGTERM
(信号 15):终止,可以被进程捕获并优雅退出。SIGKILL
(信号 9):杀死,强制终止进程,无法被进程捕获或忽略。SIGSTOP
(信号 19):停止,暂停进程,无法被进程捕获、忽略或由用户发送。SIGCONT
(信号 18):继续,继续一个被停止的进程。
# 5. 使用场景
- 优雅退出:当需要安全关闭应用程序时,可以使用
SIGTERM
。 - 强制终止:如果进程无法响应或需要立即停止,可以使用
SIGKILL
。 - 暂停和继续:对于需要暂时挂起的进程,可以使用
SIGSTOP
和SIGCONT
。
# 6. 进阶技巧
- 使用
pkill
或killall
:这些命令可以基于进程名而不是 PID 来发送信号。 - 使用
nohup
:当需要忽略SIGHUP
信号(信号 1)时,可以使用nohup
命令运行进程。 - 使用
trap
命令:在 shell 脚本中,可以使用trap
命令捕获信号并执行特定的操作。