[ruby-core:98159] [Ruby master Bug#16835] SIGCHLD + system new behavior on 2.6
From:
maths22@...
Date:
2020-05-06 22:01:13 UTC
List:
ruby-core #98159
Issue #16835 has been updated by maths22 (Jacob Burroughs).
Also I have tested and the old behavior (not calling the CLD signal handler) does appear to match the glibc behavior
``` c
#include <stdlib.h>
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
void proc_exit()
{
printf ("Handler\n");
}
int main ()
{
signal(SIGCHLD, proc_exit);
system("true");
sleep(1);
}
```
----------------------------------------
Bug #16835: SIGCHLD + system new behavior on 2.6
https://bugs.ruby-lang.org/issues/16835#change-85398
* Author: maths22 (Jacob Burroughs)
* Status: Open
* Priority: Normal
* ruby -v: ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-darwin19]`
* Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN
----------------------------------------
In rubies < 2.5, the `system` command did not trigger sigchld signal traps. On ruby >= 2.6 it does. This appears to have been introduced by https://github.com/ruby/ruby/commit/054a412d540e7ed2de63d68da753f585ea6616c3 . To observe the change in behavior, run the following code on ruby 2.5 and 2.6:
``` ruby
Signal.trap("CLD") { puts "Child died" }; system("true")
```
On ruby 2.5 it won't print anything. On ruby 2.6 it will print "Child died". I believe this is an unintended, undocumented change in behavior, but I may be wrong about that.
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>