我发现运行 SLES 10.1 的 SGI Altix 450 上的进程似乎停止运行(即几个小时内未在日志中提供进一步的输出)。此时,我想终止有问题的进程,以便重新启动它。Top 显示该进程处于 (R) 状态。虽然当我尝试终止它时什么也没发生。即使我使用 kill -9 它仍然会徘徊。在这种情况下,除了重新启动机器,我还能做什么?
答案1
进程可能已被终止,但正在等待父进程收集其返回值。在这种情况下,进程终止后将处于“Z”状态,而不是“R”状态。在这种情况下,您应该ppid
使用命令找到进程ps
并终止父进程(如果您确实确定它不会引起任何问题)。
另一种情况可能是由于某种原因,进程在被杀死后重新启动,例如 tty。在这种情况下,每次执行 kill -9 时,进程 ID 都应该会改变。查看每次尝试杀死进程时,进程 ID 是否都会改变。
答案2
该进程正在等待某些系统资源,可能是 NFS?这不允许它“放手”。我很想听听除了我之外的其他解决方案......
重新启动机器,或者让进程暂停。
我想知道您是否可以通过 kill -STOP {PID} 来“停止”该进程,以防止它消耗更多的 CPU。
即使有另一个停止的进程处于闲置状态,也应该可以重新启动它,但它可能需要仍在由其他进程使用的列表端口或共享内存段。
答案3
您检查过 dmesg 了吗?我在内核崩溃后看到过这种情况;唯一的恢复方法是重新启动(最好尽快重新启动)——然后获取修补的内核。
正常不可终止的进程将处于 D 状态,而不是 R 状态。