C言語システムコール-setsid

setsidシステムコール

概要

setsidは新しいセッションを作成します。

実行プロセスのプロセスIDの値がセッションIDとプロセスグループIDに代入され、実行プロセスが新しいセッションのセッションリーダー及びプロセスグループリーダーになります。

また、プロセスは制御端末を持たない状態になります。


setsidはデーモンのプログラムが制御端末を切り離してバックグラウンド処理で実行するために利用されます。

なお、setsid実行後に標準入出力などはクローズされませんので、オープン中のファイルディスクリプタをクローズする処理が必要となります。


サンプルプログラム


#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <unistd.h>

int
main(void)
{
    pid_t pid = 0;
    int rc = 0;

    printf("sid = %d\n", getsid(0));

    pid = fork();
    if(pid < 0){
        printf("Error: fork(%d) %s\n", errno, strerror(errno));
        return(-1);
    }
    if(pid > 0){
        /* 親プロセスを終了する */
        _exit(0);
    }

    rc = setsid();
    if(pid < 0){
        printf("Error: setsid(%d) %s\n", errno, strerror(errno));
        return(-1);
    }

    printf("sid = %d\n", getsid(0));

    return(0);
}

関連ページ