2014-07-10 49 views
2

每當我給出重啓命令時,我的進程正在接收SIGTERM信號並正在處理它。如果SIGTERM由於重新啓動,我不想處理它。處理系統重啓產生的信號

請給我任何想法。

當我做system("reboot")時,有什麼辦法可以發送kill -9信號給我的程序嗎?

我正在使用Cent OS(Linux)。

回答

1

無論何時我給重新啓動命令,我的進程正在接收SIGTERM信號並正在處理它。如果SIGTERM由於重新啓動,我不想處理它。

你可以嘗試在你的信號處理程序運行/sbin/runlevel(好吧,也許過程產卵甚至是不可能的信號處理程序雖然)來獲得當前的運行級別。運行級別6重新啓動。

有沒有辦法發送kill -9信號到我的進程當我做系統(重新啓動)。

如果您的進程是由init腳本啓動的,您可以更改腳本以便使用kill -KILL而不是其他方式執行停止。

我正在使用Cent OS(linux)。

我不知道以下情況是否適用於CentOS。

在Debian中,所有剩餘的進程(在所有kill腳本運行後都運行的進程)通過/etc/init.d/sendsigs發送信號。如果您有管理員訪問權限,則可以嘗試對其進行自定義,以便特殊命名的進程(您的)在沒有TERMing的情況下獲得KILL。

儘管如此,所有與/run/sendsigs.omit相關的pid和/run/sendsigs.omit.d/中的所有與文件相關的pid都沒有收到任何信號。

0

如果您的進程正在發出重啓系統的命令,顯然它知道重啓即將到來。事先設置合適的信號處理器,例如

signal(SIGTERM, SIG_IGN); // or SIG_DFL to restore default action (terminate process) 
system("reboot"); 

你的過程將最終仍然被打死(通過SIGKILL)系統停機權之前,但是這不會發生,直到在重啓過程中稍晚。

+1

我如何處理,如果我在Linux控制檯中運行重新啓動。 – user3822453

0

我找到了我上面的問題的解決方案,只是想在這裏更新。 在/etc/init.d中有一個文件「halt」。 此停止僅在運行級別0和6上執行。 在向所有進程發送SIGTERM之前,我添加了一行「pkill -9 processname」。