2013-06-27 32 views
2

我ksh的版本是ksh93-KSH子進程沒有忽略SIGTERM

=>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 

我執行腳本

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

和發送 「SIGTERM」 來源: - 從1號航站樓 1. KSH從/斌/ KSH如下開始2號航站樓 -

# 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 

我可以看到我的test_sigterm.sh越做越在兩種情況下接受「SIGTERM」,在後臺(&)和前臺運行殺害。 但ksh手冊頁說 - 信號。 如果命令後跟&且監視器選項未激活,則調用的命令的INT和QUIT信號將被忽略。 否則,信號具有shell從其父項繼承的值(但請參閱下面的陷阱內置命令)。

是否知道或默認行爲ksh NOT NOT IGNORE SIGTERM?或者是與ksh子SIGTERM信號處理有關的問題?

回答

0

我相信這是正常的行爲。

雖然它表示信號通常由後臺進程繼承,但TERM信號的 操作由shell是否交互確定。 (參見ksh的手冊頁下調用「i」可選項。)

如果您需要的腳本忽略SIGTERM,那麼您可以將此行添加到它:

trap '' TERM