1. 程式人生 > >為程序設定新會話setsid

為程序設定新會話setsid

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main()
{
    int pid;
    pid = fork();
    if(pid<0)
    {
        exit(1);
    }
    if(pid == 0)
    {
        printf("Child process PID is %d\n",getpid());
        printf("Group ID is %d\n",getpgid(0));
        printf("Session ID is %d\n",getsid(0));
        sleep(1);
        setsid();
        printf("have setsid\n");
        printf("Child process PID is %d\n",getpid());
        printf("Group ID is %d\n",getpgid(0));
        printf("Session ID is %d\n",getsid(0));
        sleep(30);
    }
    return 0;
}

使用setsid可以為程序設定一個新的會話,可以防止在shell關閉時候收到SIGHUP訊號而發生終止,讓程序再後臺常駐

setid函式使用需要注意幾點

1.呼叫程序不能是程序組組長,否則返回出錯

2.呼叫後改程序為一個新程序組的組長程序

3.需要root 許可權(ubuntu不需要)

4.新會話將丟棄原來的會話終端,新的會話程序沒有控制終端

5.建立新會話時候,先呼叫fork,讓父程序終止,子程序再呼叫