我正在编写自己的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 :(得分: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