【问题标题】:ctrl+c not killing a processctrl+c 不杀进程
【发布时间】:2016-09-04 23:03:16
【问题描述】:

我有一个进程可以很好地响应我本地计算机上的CTRL+C。而且它似乎也有效。

但在 EC2 实例上,它会冻结并成为已失效或僵尸进程。

kill -9 <PID> 没有删除它,我必须重新启动 EC2 实例才能正确清理它。

当它运行时,它还会加载一个内部开发的共享库,我对此没有任何影响,也无法访问其中的任何源代码来查看它在做什么。这个库也使用 CUDA 并且似乎启动了多个线程。

我尝试在主线程上安装一个信号处理程序,它确实安装了,但调用 _exit 并没有关闭整个进程,它似乎仍在等待。

为什么这里会发生阻止CTRL+C 干净地退出进程的情况?我可以覆盖或检查其他线程可能在做什么吗?

【问题讨论】:

  • 你能检查ps -ly $PIDS(状态)说什么吗?如果是D,那么进程在uninterruptible sleep
  • Z.为什么它不会被收获,我以交互方式从 shell 中启动了我的进程?
  • shell 是否仍被列为父进程?作为测试,您是否可以尝试将 SIGCHLD 直接发送到父进程以查看是否会推动它收割?
  • strace 显示什么?

标签: linux bash runit


【解决方案1】:

啊,我发现了问题。我会保留这个问题,以防它帮助其他人。

事实证明,在我的 PC 上,我有一个 GTX 680,并且在安装 CUDA 时安装了驱动程序。在 EC2 上,该卡是 GRID K520,CUDA 安装的驱动程序不起作用。我下载并安装了最新的稳定卡专用驱动程序,然后它就可以工作了。

发现是在运行nvidia-smi 之后发现的,它不会打印有关卡的任何详细信息,而只会显示Killed。再次运行 nvidia-smi 会锁定控制台。

不幸的是,我没有测试 CUDA 应用程序是否正常工作,而是依赖驱动程序似乎在日志中打印一条消息,说明它已加载并假设它正在工作。

更新驱动程序包括从 nvidia 下载最新的驱动程序(使用 .run 版本)。那么:

sudo modprobe -r nvidia_uvm
sudo modprobe -r nvidia

最后使用如下命令安装它:

sudo ./NVIDIA-Linux-x86_64-3xx.xx.xx.run

然后我重新启动了实例并使用 nvidia-smi 进行了验证

这个链接很有见地 - CUDA 7.5 unstable on EC2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-23
    • 2019-07-13
    相关资源
    最近更新 更多