2011-11-22 67 views
18

我使用的是mac/linux,我知道ctrl-z在终端中停止了当前运行的命令,但当我检查系统监视器时,我经常看到该进程仍在运行。在终端中停止命令的正确方法是什么?退出命令行程序的正确方法?

通常我在运行python或ruby应用程序时遇到了这个问题,我不确定这是否与它有关,只是认为我会补充一点。

+0

如果你做ctrl-z然后键入退出它将关闭后台应用程序。 –

+0

我仍然看到运行结束后的进程 –

+0

ctrl-C不够好? –

回答

35

使用控制-Z暂停处理(参照从stty -a输出其中列出susp下的键行程)。这使它运行,但在假死(所以它没有使用任何CPU资源)。它可以稍后恢复。

如果要永久停止程序,那么任何中断(通常控制-C)或退出(通常控制 - \)将停止处理,后者产生一个核心转储(除非你”已禁用它们)。您也可以从另一个终端使用HUP或TERM信号(或者,如果确实必要的话,使用KILL信号,但先尝试其他信号)发送到进程;或者您可以使用control-z暂停该进程,然后从当前终端发送死亡威胁,然后将(即将死亡)进程返回到前台(fg)。

请注意,所有组合键都可能通过stty命令或等同物更改;系统之间的默认值可能会有所不同。

+3

很好的答案。我还会提及与'fg'相反的'bg'。它允许您在后台继续执行程序,以便您可以使用终端进行其他操作。相关的东西是“disown”,它允许你从终端上分离你的后台程序,这样即使关闭终端也能继续运行。要查看您的shell正在控制哪些作业,请使用'jobs'命令。 –

2

如果你做ctrl-z然后键入exit它会关闭后台应用程序。

Ctrl+Q是杀死应用程序的另一种好方法。

+0

什么密钥是'control-q'映射到您的系统上?它通常是'start'(在使用'control-s'来停止输出后恢复输出)。 –

+0

我只是在测试后发现,这只适用于我的Mac。我认为这是普遍的。在注意到没有人发布它作为选项时,何时进行薄荷和尝试。和'ctrl-shift-q'。但在linux中为我所做的一切都是关闭终端。不是用户想要的。 –

1

Job Control on UNIX systems

看看如果你没有你的shell的控制,只要击中CTRL +Ç停止进程。如果这不起作用,您可以尝试使用ctrl + Z并使用jobskill -9 %<job #>杀死它。 '-9'是一种信号。您可以man kill查看信号列表。