如何终止一个忽略所有终止信号的进程?

时间:2014-02-16 15:15:10

标签: shell unix terminal

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

有人能告诉我这里发生了什么吗?似乎如果我强迫终端退出,一些资源就不会是免费的;所以下次我尝试打开终端时,资源不可用。

1 个答案:

答案 0 :(得分: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