2013-06-27 3 views
2

Моя КШ версия ksh93-КШ не игнорируя 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 

Я Выполнение сценария от терминала 1 - 1. КШ запускается из/bin/KSH, как показано ниже:

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

и отправка "SIGTERM" от Терминал 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» в любом случае, при запуске в фоновом режиме (&) и переднего плана. Но man-страницы ksh говорят - Сигналы. Сигналы INT и QUIT для вызываемой команды игнорируются, если за командой следует &, а опция монитора не активна. В противном случае сигналы имеют значения, унаследованные оболочкой от родительского (но см. Также встроенную команду trap).

Является ли поведение ksh неизвестным или стандартным для NOT IGNORE SIGTERM? или это проблема с обработкой сигнала SIGTERM для ksh?

ответ

0

Я считаю, что это нормальное поведение.

Хотя он говорит, что сигналы обычно унаследованы фоновыми процессами, действие сигнала TERM определяется тем, является ли оболочка интерактивной или нет. (См «-i» опцию на странице КШ человек под Призыва.)

Если вам нужен сценарий игнорировать SIGTERM, то вы можете добавить эту строку к нему:

trap '' TERM