私の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 シグナル処理に問題がありますか?