Linux

我可以讓子程序中的 Ctrl-C 在父程序中執行一些操作嗎?

  • November 9, 2016

我在一個 Web 應用程序上工作,它使用memcachemongodb 以及python基於 Web 框架。python需要在前台,以便我可以看到控制台輸出,或者在需要時進入調試器。

目前我有一個start.sh

memcache_start
mongodb_start
python fg

stop.sh

memcache_stop
mongodb_stop

自動執行所有操作的腳本。

通常我會使用-殺死pythonin 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+時Cpython會正常退出,但 shell 會繼續執行腳本的剩余清理命令。第二個命令trap - INT不是嚴格要求的,它使您可以再次使用Ctrl+C來停止清理過程。也就是說,如果您將 SIGINT 發送到memcache_stop,shell 將不會嘗試執行mongodb_stop並且會簡單地退出。

是一篇詳細的文章,描述了 shell 如何處理 SIGINT/SIGQUIT。

引用自:https://unix.stackexchange.com/questions/321609