2012年6月20日

[ruby-list:48797] setsid(2) と getsid(2)

さとうふみやす @ OSSTech です。

Ruby で Process.setsid (setsid(2)) が失敗します。

$ uname -a
Linux sugar 3.2.0-2-amd64 #1 SMP Mon Jun 11 17:24:18 UTC 2012 x86_64 GNU/Linux

$ ruby1.8 -e "Process.setsid"

ruby 1.8.7 (2012-02-08 patchlevel 358) [x86_64-linux]
-e:1: undefined method `getsid' for Process:Module (NoMethodError)

$ ruby1.9.1 -e "Process.setsid"
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]
-e:1:in `<main>': undefined method `getsid' for Process:Module (NoMethodError)

Perl や setsid(1) では問題ありません。

$ perl -e 'use POSIX; POSIX::setsid || die "$!"'

$ setsid true

setsid(2) によると、EPERM になるのは呼び出したプロセスが既に
プロセスリーダーの場合、と記載されています。それを確かめたくて
Ruby で getsid(2) 相当で確認しようと思ったのですが、Process.getsid
はないようです。需要がないからでしょうか?

$ ruby1.9.1 -e 'p Process.getsid'
-e:1:in `<main>': undefined method `getsid' for Process:Module (NoMethodError)

それはともかく、Ruby プロセスの起動から終了までのシステムコール
トレースを見たのですが、プロセスリーダーになっている様子が
ありません。上記のように Process.setsid が失敗する原因は
何かわかりますでしょうか。

--
-- Name: SATOH Fumiyasu (fumiyas @ osstech co jp)
-- Business Home: http://www.OSSTech.co.jp/
-- GitHub Home: https://GitHub.com/fumiyas/


投稿者 xml-rpc : 2012年6月20日 20:38
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/111019
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。