[ruby-list:48802] Re: setsid(2) と getsid(2)
From:
Tanaka Akira <akr@...>
Date:
2012-06-20 22:01:26 UTC
List:
ruby-list #48802
2012年6月21日 6:49 Tanaka Akira <akr@fsij.org>: > というわけで、むしろ問題は、なぜ perl は成功するのか、ということでしょう。 > > あと気がついたのですが、ruby を strace すると、setsid が成功したように > 見えるのが謎です。(gdb では失敗が観測されるのですが) > > % strace -e setsid ruby -ve 'p Process.setsid' > ruby 2.0.0dev (2012-03-16 trunk 35049) [x86_64-linux] > setsid() = 6310 > 6310 おっと、この場合のプロセスグループリーダーは strace であって、 ruby ではないので、成功するのはあたりまえでした。 以下のように、setpgid で プロセスグループリーダにしてやればちゃんと失敗が 観測できます。 % strace -e setpgid,setsid ruby -ve 'Process.setpgid(0,0); p Process.setsid' ruby 2.0.0dev (2012-03-16 trunk 35049) [x86_64-linux] setpgid(0, 0) = 0 setsid() = -1 EPERM (Operation not permitted) -e:1:in `setsid': Operation not permitted (Errno::EPERM) from -e:1:in `<main>' perl でも同様に失敗が観測できますが、die には至りません。 % strace -e setpgid,setsid perl -e 'use POSIX; POSIX::setpgid(0,0); POSIX::setsid || die "$!"' setpgid(0, 0) = 0 setsid() = -1 EPERM (Operation not permitted) POSIX::setsid は -1 つまり真を返すようなので、|| ではうまくいかないんじゃないでしょうか。 % perl -e 'use POSIX; print POSIX::setsid, "\n"; print "$!\n"' -1 Operation not permitted -- [田中 哲][たなか あきら][Tanaka Akira]