為程序設定新會話setsid
阿新 • • 發佈:2018-12-31
#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,讓父程序終止,子程序再呼叫