- int init_daemon(const char *pathname)
- {
- struct sigaction act;
- int max_fd, i, ret;
- char buf[100];
- /* 第一次調用fork,爲setsid做準備 */
- ret = fork();
- if( 0 > ret )
- {
- fprintf(stderr, "error in first fork./n");
- exit(1);
- }
- else if( 0 != ret) /* 父進程退出 */
- exit(0);
- /* 第一次fork的子進程部分 */
- /* 調用setsid,使得進程與舊會話過程相分離 */
- ret = setsid();
- if( 0 > ret )
- exit(1);
- /* 忽略信號SIGHUP */
- act.sa_handler = SIG_IGN;
- sigemptyset(&act.sa_mask);
- act.sa_flags = 0;
- sigaction(SIGHUP, &act, NULL);
- /* 第二次fork,使得進程不再是會話過程的領頭進程,不能打開終端作僞自己的控制終端*/
- ret = fork();
- if(0 > ret)
- exit(1);
- else if( 0 != ret ) /* 父進程退出 */
- exit(0);
- /* 第二次fork的子進程部分 */
- /* 修改進程的當前目錄 */
- chdir("/");
- /* 清除進程的文件掩碼 */
- umask(0);
- /* 使得進程退出原來的進程組,不受原來進程組的干擾 */
- setpgrp();
- /* 關閉進程所有的文件描述符 */
- max_fd = sysconf(_SC_OPEN_MAX);
- for(i = 0; i < max_fd; i++)
- close(i);
- /* 打開空設備,讓原來的輸入輸出移到該設備處 */
- open("/dev/null", O_RDWR);
- dup(1);
- dup(2);
- /* 打開系統日誌 */
- openlog(pathname, LOG_PID, 0);
- return 0;
- }
linux 守護進程(daemon)的創建方法
用C語言來創建守護進程方法大致如下:
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.