可以中止当前正在运行的bash命令吗?

30
有没有可能手动中止当前正在运行的bash命令?例如,我正在使用“find”命令,但它正在耗费很长时间...我该如何手动停止它?
3个回答

45

有些东西不会对Ctrl+C做出反应;在这种情况下,您还可以使用Ctrl+Z来停止该进程,然后使用kill %1 - 或者甚至是fg来返回到该进程。阅读man bash中的“JOB CONTROL”部分以获取更多信息,非常有用。(如果您不熟悉man或manpager,您可以使用/进行搜索。man bash然后在其中使用/JOB CONTROLEnter开始搜索,n将找到下一个匹配项,即正确的部分。)


1
Ctrl+Z 是非常强大的。使用它将任务置于“挂起”模式。然后可以使用 fg 将任务再次带到前台(就像之前运行一样),或者可以使用 bg 将任务放入后台(就像在命令末尾使用 & 启动一样)。请参阅 http://linuxreviews.org/beginner/jobs/。 - Lee Netherton
1
有没有“CTRL+Z & kill %1”的键盘快捷键? - kodmanyagha
@Chris Morgan - 如果一个命令正在运行,是否应该在中途停止?这并不特定于失控的进程。我所指的用例是正在搜索/find命令。假设它花费的时间比预期的长,是否应该停止它?它会以任何方式导致文件系统损坏吗? - Motivated
@积极性:这取决于进程以及您如何停止它。简而言之,SIGTERM(请求程序终止)应该在所有软件中都是完全安全的,并且这是kill的默认设置。 SIGKILL(强制终止程序)则不太安全,尽管在几乎所有软件的几乎任何时候都应该没问题(行为良好的软件将以原子方式执行变异)。像find这样的东西除非您告诉它(例如-delete),否则不会修改任何内容,因此强制终止它是可以的。 - Chris Morgan
@ChrisMorgan - 请澄清一下,CTRL+CSIGTERM 吗?您所说的“表现良好的软件将原子地执行变异”是什么意思? - Motivated
Ctrl+C 是一个信号中断(SIGINT)。同样,它“应该”是安全的。通过原子方式执行变异,我的意思不是这种夸张的场景:当您打开文件时,它会从磁盘中删除它,然后在退出时保存其当前状态,留下一段时间,其中崩溃会丢失数据;而是任何修改都将存在,或不存在,但不会是中断的中间状态。或者数据库事务:您将获得所有事务或没有事务,而不是其中的一部分。 - Chris Morgan

15

好的,这就是顺序:

第一步尝试:Ctrl+c

第二步尝试:Ctrl+z

第三步:登录到另一个控制台,在您的第一个控制台中找到不响应前面提到的终止/睡眠按键的命令进程,使用命令:ps aux

然后用命令杀死进程:kill -9 <PROCESSID>

当然,可能有更智能的ps命令参数或grep的可能性,但这会使解释更加复杂。


第三个选项对我有用。谢谢。 - Bruno Bieri

6

按下 CtrlC 键发送 SIGINT 信号给命令,尝试中断它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接