2014-02-16 89 views
0

我在写我自己的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. 

有人能告诉我这是怎么回事呢?看来,如果我强迫终端退出,一些资源就不会自由;所以下次尝试打开终端时,资源不可用。

+0

没有访问您的代码,我们只能推测。但似乎你有一个相当严重的资源泄漏。当某些事情失败时,您的代码是否积极地重试? – tripleee

回答

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 
+1

不可捕捉,不可忽视的杀死冷血 – Nmzzz

+0

@Nmzzz yep,heh :) - 如果这解决了您的问题,请将其标记为解决方案。 – haneefmubarak