[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

shell background job and trap SIGCHILD



Привет.

Есть подозрение что dash и bash имеют баг в обработке команды trap arg SIGCHLD.

Есть некий шелл скрипт (код в конце письма), который (imho) должен работать так,
как он работает только в ZSH.
А именно, обработчик SIGCHLD должен быть вызван _сразу_ после завершения фонового процесса.

% zsh ./bg.sh 
13:02:08: parent 32128, child 32131
13:02:10: child exited after 2 sec
13:02:10: SIGCHLD 32131
13:02:12: bye...

Bash-у вообще на..ть на установленный обработчик SIGCHLD
% bash ./bg.sh  
13:03:06: parent 32149, child 32150
13:03:08: child exited after 2 sec
13:03:10: bye...

Ну а "родной" /bin/sh он же Dash лучше бы и не делал ничего.
% dash ./bg.sh
13:03:49: parent 32157, child 32158
13:03:49: SIGCHLD 32158
13:03:51: child exited after 2 sec
13:03:53: SIGCHLD 32158
13:03:53: bye...
13:03:53: SIGCHLD 32158

WTF?

[code]
print_msg()
{
   echo "`date +%H:%M:%S`: $@"
}

on_sigchld() {
   trap '' CHLD
   print_msg "SIGCHLD $!"
   trap on_sigchld CHLD
}

trap on_sigchld CHLD

(
   sleep 2
   print_msg "child exited after 2 sec"
) &

print_msg "parent $$, child $!"

sleep 4
print_msg "bye..."
[/code]


Reply to: