On 2017-11-27 at 17:47 +0530, Thiruvadi Rajaraman wrote: > Reproducible test case and Console logs: > ========================================
Simpler test case: bash-4.4-rc1# cd examples/loadables/ bash-4.4-rc1/examples/loadables# enable -f ./sleep sleep bash-4.4-rc1/examples/loadables# sleep 1 & time sleep 10 [1] 8892 real 0m1.005s user 0m0.001s sys 0m0.004s [1]+ Done sleep 1 > Fix patch: > ========== > # Attached the fix patch - > Fix_for_bash_loadable_builtin_sleep_execution_issue.patch > > > Please kindly review and suggest your comments. > > Thanks, > Thiruvadi Rajaraman I guess the line + } while ( (ret == -1)); should actually be while ( (ret == -1) && (errno == EINTR) ); ? Also there's the issue that select() _may_ modify the object pointed to by the timeout argument [POSIX]. But it may not, in which case this would end up oversleeping. On such system, doing eg. sleep 9 & time sleep 10 would end up sleeping 19 seconds. The solution is probably to change that select() into a pselect() that masks SIGCHLD (as well as _some_ other signals, but not SIGINT). Best regards