【问题标题】:Proper way to exit command line program?退出命令行程序的正确方法?
【发布时间】:2012-01-03 13:10:10
【问题描述】:

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

通常我在运行 python 或 ruby​​ 应用程序时遇到这个问题,我不确定这是否与它有关,只是想我会添加。

【问题讨论】:

  • 如果你按 ctrl-z 然后输入 exit 它将关闭后台应用程序。
  • 运行退出后我仍然看到进程
  • 另外,我必须从活动监视器强制退出进程,而不是仅仅退出它以使其停止,这主要是我正在运行的程序类型的错误,但我觉得值得一提

标签: unix terminal


【解决方案1】:

使用 control-z 暂停进程(请参阅stty -a 的输出,其中列出了susp 下的击键)。这让它运行,但处于假死状态(因此它不使用任何 CPU 资源)。以后可以恢复。

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

请注意,所有组合键都可以通过stty 命令或等效命令进行更改;默认值可能因系统而异。

【讨论】:

  • 不错的答案。我还要提到bg,它与fg 正好相反。它允许您在后台恢复程序执行,以便您可以将终端用于其他用途。相关的是disown,它允许您将后台程序与终端分离,以便即使您关闭终端它也能继续运行。要查看您的 shell 正在控制哪些作业,请使用 jobs 命令。
【解决方案2】:

如果您输入ctrl-z,然后输入exit,它将关闭后台应用程序。

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

【讨论】:

  • control-q 映射到您系统上的哪个键?通常是start(用于在使用control-s停止输出后恢复输出)。
  • 我只是在测试后才注意到这仅适用于我的 Mac。我以为它是通用的。在注意到没有人将其作为选项发布后,何时铸造并尝试它。和它ctrl-shift-q。但是在 linux 中为我所做的只是关闭终端。不是用户想要的。
【解决方案3】:

看看Job Control on UNIX systems

如果您无法控制您的 shell,只需按 ctrl + C 即可停止该过程。如果这不起作用,您可以尝试 ctrl + Z 并使用 jobskill -9 %<job #> 杀死它。 “-9”是一种信号。您可以man kill查看信号列表。

【讨论】:

    猜你喜欢
    • 2016-11-12
    • 2011-12-22
    • 2010-09-26
    • 2020-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多