2016-04-22 7 views
1

シグナルハンドラでシグナルが捕捉されたときに、誰がシグナルを実際に生成したのかを知りたいと思います。それがユーザー生成またはシステム生成か、またはOOM(Out-Of-Memory Management)によって生成されたか。 問題は、perconaツールキットを使用してデータベース変更を実行しており、2-3時間後にSIGHUPを使用して毎回停止しています。bash:トラップされたときに生成された信号のソースを知るには?

私は信号ハンドラをインストールしましたが、それを捕まえるのに、どこから来たのかを知りたいと思っています。 サンプルプログラムは以下の通りです:

trapCount=0 

trapFunc() 
{ 
trapCount=`expr $trapCount + 1` 
echo "Sighup received...$trapCount" # But how to know who generated it 
} 

trap 'trapFunc' HUP 

while [ 1 ] 
do 
echo "First Line" 
sleep 1 
echo "Second Line" 
sleep 1 
echo "Third Line" 
sleep 1 
echo "Fourth Line" 
sleep 1 
echo "Sixth Line" 
sleep 1 
echo "Seventh Line" 
sleep 1 
echo "Eighth Line" 
done 

答えて

0

できません。信号は、匿名の信号機に代わって、オペレーティングシステムによって配信される。

+0

したがって、デバッグトレースは絶対にありません。それは本当に残念です。 – kingsmasher1

+0

しかし、少なくともこの場合、 'SIGHUP 'は制御端末が閉じられたことを意味します(少なくとも、制御端末が閉じられたと思う人があなたのコードを望んでいる)。 – chepner

+0

スクリプトは 'nohup'を使って実行されましたが、それはまだ' sighup'によって閉じられていました。私はそのマシンを実行している唯一のユーザーであり、スクリプトに加えてmysqlは実行中の唯一のプログラムでした。 – kingsmasher1

関連する問題