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

From: KOSAKI Motohiro <kosaki.motohiro@...>
Date: 2012-06-20 20:35:43 UTC
List: ruby-list #48800
> 原因はまったくわかりませんが、
>
> #include <sys/types.h>
> #include <unistd.h>
> #include <stdio.h>
> #include <stdlib.h>
> #include <errno.h>
>
> main()
> {
>        int err;
>
>        printf("getpid()=%d\n", getpid());
>        printf("getpgid()=%d\n", getpgid(0));
>        err = setsid();
>        printf("%d, %d\n", err, errno);
>        return 0;
> }
>
> というCプログラムが
>
> getpid()=2319
> getpgid()=2319
> -1, 1
>
> という結果を返すのでRubyと全然関係ない話なんじゃないですかね

ruby でも以下は動いているように見えます
./miniruby -e "Process.fork {Process.setsid }"

あと、Linuxのsetsidコマンドは自分がプロセスグループリーダーだったら
自動的に一回forkする機能を持つようです

setsid.c
------------------------------------------
	if (getpgrp() == getpid()) {
		switch (fork()) {
		case -1:
			err(EXIT_FAILURE, _("fork"));
		case 0:
			/* child */
			break;
		default:
			/* parent */
			return 0;
		}
	}
	if (setsid() < 0)
		/* cannot happen */
		err(EXIT_FAILURE, _("setsid failed"));

In This Thread