Linux如何从命令行卡死的进程中退出?

本文详细解释了在Linux中,使用Ctrl+Z(挂起)和Ctrl+C(终止)命令处理卡死或长时间运行的进程的区别。Ctrl+Z可能导致进程未真正关闭,而Ctrl+C则会立即结束进程并释放资源。作者还通过实例说明了在处理端口占用时的不同效果。
摘要由CSDN通过智能技术生成

Linux如何从命令行卡死的进程中退出?

不知道大家在使用Linux的时候,会不会遇到一些命令,有可能卡顿,有可能执行时间过长(比如使用 find 查找某个文件),这个时候我不想继续执行这个命令了,说来惭愧,我之前一直使用Ctrl+Z去终止这个命令,今天才知道,这样有很大的问题!

信号简介

一个进程在运行的时候,是能够接受内核发送的信号的,并且对这个信号做出自己的默认行为(没有被修改的话),我列举一下常见的信号列表:

image-20240129105103106先看一下信号9,我们熟知的kill -9 <进程号>,就是让内核发送给进程终止信号,进程接收以后就会终止。

同理,我们也可以使用键盘发送信号 ,Ctrl + Z发送的信号只是挂起这个进程,Ctrl + C才是终止。这意味着,使用Ctrl + Z从终端退出的进程,并没有被释放!

实验

接下来通过两个实验,看看Ctrl + Z(挂起)和Ctrl + C(停止)的区别。

find 查找文件

我们使用find命令从home目录查找某个文件,然后分别使用Ctrl + Z(挂起)和Ctrl + C(停止),看看他们的区别。

  1. Ctrl + Z

    运行find命令后,使用ctrl +Z 退出

    image-20240129153604841

    此时使用ps -t显示当前正在运行的进程的信息:

    image-20240129154016839

​ 可以发现进程还存在着。

  1. Ctrl + C

    运行find命令后,使用ctrl +C

    image-20240129154308428

    此时可以发现进程被彻底关闭了。

其实这种情况还是好的一种情况,因为本质上shell终端也是一个进程,在shell终端里使用命令,相当于创建终端的子进程,当终端(父进程)被关闭时,其子进程也会被关闭(大部分时候)。对于上面的情况,当我们关闭shell命令行时,find进程也会被关闭。

但是,这也只是大部分情况,也可能有一些子进程即使在父进程被关闭之后也不会被关闭,而是一直被挂起!

端口占用

在系统开启一个进程,这个进程会监听某个端口:

image-20240129155119994

  1. Ctrl + Z

    在这之后,即使关闭终端,56868进程也没有被释放。

    image-20240129155536643

​ 上图是在一个新的终端里使用sudo lsof -i :801查看端口的占用,发现这个进程并没有被释放,因此需 要使用kiil -9 56868释放进程。

  1. Ctrl + C

    image-20240129160036827

​ 进程被释放,端口也被释放。

所以大家如果不打算继续使用这个被退出的进程,记得使用Ctrl + C退出哦。

更多与Linux信号相关的知识,感兴趣的可以移步:https://www.cnblogs.com/curiositywang/p/17994774

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王行知

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值