我在服务器上运行了 R 控制台,该过程花费的时间比我预期的要长得多。因此我尝试通过 ctrl+z 关闭它,但没有成功。最后我关闭了终端。但当我检查 top 命令时,该进程仍然存在。我用了kill,但不会杀死进程。顶部命令输出:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
27448 zhenyang 20 0 20.133g 0.020t 3.840g R 100.0 21.3 72:00.06 R
我查了网站,有人说可能是ctrl+z把进程放在后台,但是fg命令不起作用。
有人帮忙吗?
答案1
运行命令kill
并向其传递进程 ID,即您的情况
kill 27448
默认情况下,这会杀死进程,但如果程序设置了信号处理程序,它可能会继续运行。如果进程继续运行,请使用
kill -KILL 27448
(或同等意义kill -9 27448
)。 KILL 信号无法被捕获,它总是杀死进程。 (也许不会立即如果进程正在执行一些长输入/输出,但它确实会杀死它。)
答案2
CTRL
+Z
不会终止进程,它会暂停它们的执行(也称为停止它们)。它通过向TSTP
进程发送信号来完成此操作,可以通过CONT
向进程发送信号来恢复该进程。
kill -CONT <pid>
一旦挂起,进程将不会响应其他好的信号,例如TERM
(kill
默认发送的信号),直到进程使用信号恢复CONT
- 此时它将立即处理所有待处理的信号。例外情况是KILL
信号立即终止进程,而不给它优雅结束的机会。
kill -KILL <pid>
这是一般不鼓励因为它将跳过进程通常执行的任何拆卸/清理操作。相反,CTRL+Z
您应该使用CTRL+C
来要求前台进程结束。这会将INT
信号发送到进程,该进程通常(并不总是)具有与信号类似的行为TERM
- 它要求进程正常结束。
您可以阅读有关 linux/bash 进程作业控制的更多信息这里。