2

私のkshバージョンはksh93-です

=>rpm -qa | grep ksh 
ksh-20100621-3.fc13.i686

以下のような単純なスクリプトがあります - #cat test_sigterm.sh -

#!/bin/ksh
trap 'echo "removing"' QUIT 
while read line
do
sleep 20
done

ターミナル 1 - 1 からスクリプトを実行しています。ksh は以下のように /bin/ksh から開始されます。

# exec /bin/ksh 
2. The script is executed from this ksh- 
# ./test_sigterm.sh&
[1] 12136

ターミナル2から「SIGTERM」を送信する -

# ps -elf | grep ksh 
4 S root     12136 30437  0  84   4 -  1345 poll_s 13:09 pts/0    00:00:00 /bin/ksh ./test_sigterm.sh
0 S root     18952 18643  0  80   0 -  1076 pipe_w 13:12 pts/5    00:00:00 grep ksh
4 S root     30437 30329  0  80   0 -  1368 poll_s 10:04 pts/0    00:00:00 /bin/ksh

# kill -15 12136

バックグラウンド (&) およびフォアグラウンドで実行した場合、どちらの場合でも「SIGTERM」を受信すると test_sigterm.sh が強制終了されていることがわかります。しかし、ksh の man ページには、Signals と書かれています。コマンドの後に & が続き、監視オプションがアクティブでない場合、呼び出されたコマンドの INT および QUIT シグナルは無視されます。それ以外の場合、シグナルはその親からシェルによって継承された値を持ちます (ただし、以下の組み込みコマンドのトラップも参照してください)。

SIGTERMを無視しないことは、kshの既知またはデフォルトの動作ですか? または、ksh の子 SIGTERM シグナル処理に問題がありますか?

4

1 に答える 1