2014-02-16 148 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