在Linux中,如何杀死一个进程?如果无法正常终止应如何操作?

在Linux中,如何杀死一个进程?如果无法正常终止应如何操作?  https://www.cnblogs.com/huangjiabobk/p/18093634

 

问题:在系统自带的 gui 进程管理器中,无法 kill 的某些进程时,需要的解决方案。

======================================

在Linux中,如何杀死一个进程?如果无法正常终止应如何操作?

问题一:有进程占用显卡内存,但是程序又没有运行起来,成为僵尸进程,就想把他kill掉,但是kill不掉
解决方式:

    重启(也不一定能解决)
    还是要kill掉
    进程kill不掉的原因一般为,想kill的进程是子进程,父进程没kill的情况下,子进程就kill不了,那么我们需要kill他的父进程
    eg. 当前想要kill的进程pid是 19757
    尝试 kill 19757 和 kill -9 19757后
    ps ux 仍能看到19757的进程,那么极有可能就是所谓的子进程了
    解决方式:

        cd /proc/19757
        cat status

    然后显示有 PPID = 1000
    这就是19757的父进程了

        kill -9 1000

    再次

        ps ux

    会发现19757进程和1000进程都没了,显卡中的内存占用也没了

问题二:进程号显示相关异常,Ubuntu(Linux)GPU显存被占用但是找不到进程解决方法
nvidia-smi命令显示有进程占用显存,且显示进程号为 “10597”,无法kill,top,ps ux 也找不到这个进程
在确定这个虚假进程号“10597”归属自己的情况下

    安装 psmisc(看下面的sudo就知道需要管理员权限)

sudo apt update
sudo apt install psmisc

    然后使用fuser查看对应的进程

fuser -v /dev/nvidia*

接下来将显示的进程号 kill -9 PID 就行了

原文链接:https://blog.csdn.net/qq_37508554/article/details/121783698

3. 使用 pkill 命令

  https://www.cnblogs.com/huangjiabobk/p/18093634

pkill 命令与 killall 类似,但它可以根据进程名、进程的有效用户ID等条件选择性地杀死进程:

pkill -TERM <process_pattern>  # 发送SIGTERM信号
pkill -9 <process_pattern>   # 发送SIGKILL信号,强制终止
对于僵死(zombie)进程

僵死进程实际上已经结束了,但由于其父进程尚未收集其退出状态,因此还会显示在进程列表中。僵死进程并不占用系统资源,除了在进程表中的一个条目。要解决僵死进程问题,通常不需要“杀死”它们,而是应当处理其父进程或者重新启动父进程以使其能够正确回收子进程。

强制终止顽固进程

对于某些异常顽固的进程,即使 SIGKILL 也不起作用的情况非常罕见,通常意味着内核或系统出现了严重问题。在这种情况下,可能需要考虑以下步骤:

  • 检查进程是否进入了不可中断的系统调用状态,如果是,则可能需要使用 ptrace 工具或内核工具如 fuserlsof 等来进一步诊断和解决问题。
  • 如果是因为文件系统错误导致进程无法终止,尝试卸载相关文件系统或修复文件系统错误。
  • 在极端情况下,可能需要重启相关的服务、守护进程,甚至整个系统。
注意事项
  • 在大多数情况下,除非必要,否则尽量避免使用 SIGKILL,因为它不给进程保存状态或释放资源的机会。
  • 在生产环境中,应当尽可能了解进程行为并遵循正确的程序退出策略,以免数据丢失或系统不稳定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值