【问题标题】:How to terminates a process with all termination signals ignored?如何在忽略所有终止信号的情况下终止进程?
【发布时间】:2014-02-16 15:15:09
【问题描述】:

我正在编写自己的 shell。在 shell 进程中,所有的终止信号都应该被忽略。如果我没有实现内置的exit 命令,我该如何终止我的shell 进程?

我试图强制终端退出。但是这样做会导致无法再次打开终端!

OS X 终端:

[Could not create a new process and open a pseudo-tty.]

[forkpty: Resource temporarily unavailable]

[Could not create a new process and open a pseudo-tty.]

iTerm:

Unable to Fork!

iTerm cannot launch the program for this session.

谁能告诉我这里发生了什么?似乎如果我强制终端退出,一些资源将无法释放;所以下次我尝试打开终端时,资源不可用。

【问题讨论】:

  • 无法访问您的代码,我们只能推测。但看起来你有一个相当严重的资源泄漏。当出现故障时,您的代码是否会积极重试?

标签: shell unix terminal


【解决方案1】:

最坏的情况:在其他地方打开一个新终端并终止你的 shell。

假设你的 shell 被称为nmzsh:

打开另一个终端并:

$ ps aux | grep nmzsh # find the pid
1000      1595  0.0  0.0  47408  5080 tty1     S+   11:46   0:00 nmzsh
1000     12094  0.0  0.0  13652   948 pts/7    S+   15:21   0:00 grep nmzsh
$ kill -KILL 1595 # murder nmzsh in cold blood

如果你想杀死所有正在运行的nmzsh 进程,那么它更简单(也更危险):

$ killall -KILL nmzsh # mass murder all of the nmzsh

【讨论】:

  • @Nmzzz 是的,呵呵 :) - 如果这解决了您的问题,请将其标记为解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-13
  • 2011-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多