Linux
我可以讓子程序中的 Ctrl-C 在父程序中執行一些操作嗎?
我在一個 Web 應用程序上工作,它使用
memcache
等mongodb
以及python
基於 Web 框架。python
需要在前台,以便我可以看到控制台輸出,或者在需要時進入調試器。目前我有一個
start.sh
memcache_start mongodb_start python fg
和
stop.sh
memcache_stop mongodb_stop
自動執行所有操作的腳本。
通常我會使用-殺死
python
in fg ,這會殺死. 現在我需要顯式執行以優雅地關閉系統。Ctrl``C``python``stop.sh
start.sh 是否有可能知道
Ctrl
-C
SIGINT
以便我也可以執行停止命令,因為它在邏輯上是必須執行的下一個連續操作?
在執行 python 之前使用
trap ' ' INT
來告訴你的 shell 忽略 SIGINT 並trap - INT
在之後恢復預設行為:memcache_start mongodb_start trap ' ' INT python fg trap - INT memcache_stop mongodb_stop
在該
trap ' ' INT
行之後,shell 被指示忽略 SIGINT,但python
不受此影響。因此,當您點擊Ctrl
+時C
,python
會正常退出,但 shell 會繼續執行腳本的剩余清理命令。第二個命令trap - INT
不是嚴格要求的,它使您可以再次使用Ctrl
+C
來停止清理過程。也就是說,如果您將 SIGINT 發送到memcache_stop
,shell 將不會嘗試執行mongodb_stop
並且會簡單地退出。這是一篇詳細的文章,描述了 shell 如何處理 SIGINT/SIGQUIT。