linux提供了 daemon()函数主要用于希望脱离控制台,以守护进程形式在后台运行的程序

原型:

#include <unistd.h>int daemon(int nochdir, int noclose);

参数:

当nochdir为0时,daemon将更改进城的根目录为root(“/”)。

当noclose为0是,daemon将进城的STDIN, STDOUT, STDERR都重定向到/dev/null。

返回值:

deamon()调用了fork(),如果fork成功,那么父进程就调用_exit(2)退出,所以看到的错误信息 全部是子进程产生的。如果成功函数返回0,否则返回-1并设置errno。

daemon的实现大致如下:

int daemon( int nochdir, int noclose )
{pid_t pid;if (!nochdir && (chdir("/") != 0)) //如果nochdir=0,那么改变到"/"根目录{return -1;}if (!noclose)  //如果没有noclose标志{int fd = open("/dev/null", O_RDWR);if (fd < 0){return -1;}/* 重定向标准输入、输出、错误 到/dev/null,键盘的输入将对进程无任何影响,进程的输出也不会输出到终端*/dup(fd, 0);dup(fd, 1);dup(fd, 2);close(fd);}pid = fork(); //创建子进程.if (pid < 0)   //失败{return -1;}if (pid > 0){_exit(0); //返回执行的是父进程,那么父进程退出,让子进程变成真正的孤儿进程.}//创建的 daemon子进程执行到这里了if (setsid() < 0)     //创建新的会话,并使得子进程成为新会话的领头进程{return -1;}return 0; //成功创建daemon子进程
}

使用示例如下:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <limits.h>int main(int argc, char *argv[])
{char strCurPath[PATH_MAX];if(daemon(1, 1) < 0){perror("error daemon.../n");exit(1);}sleep(10);if(getcwd(strCurPath, PATH_MAX) == NULL){perror("error getcwd");exit(1);}printf("%s/n", strCurPath);return 0;
}

假如运行成功,父进程在daemon函数运行完毕后自杀,以后的休眠和打印全部是子进程来运行。

可以修改daemon函数的参数来查看效果。

可以去掉daemon一句,用./a.out&来验证效果。

linux c daemon 程序后台运行函数相关推荐

  1. Linux下让程序后台运行

    Linux下优雅的让程序后台运行   假设在终端上启动运行了一个程序,跑了几天,如果不小心把terminal关了,那么程序就会终止,这是SIGHUP信号的原因,即使通过bg置为后台运行同样会如此,应该 ...

  2. linux下设置程序后台运行,linux中如何让进程在后台运行

    一. nohup / setsid / & 使用场景: 如果只是临时有一个命令需要长时间运行,什么方法能最简便的保证它在后台稳定运行呢? 我们的解决办法就有两种途径:要么让进程忽略 HUP 信 ...

  3. Linux下优雅的让程序后台运行

    Linux下优雅的让程序后台运行 假设在终端上启动运行了一个程序,跑了几天,如果不小心把terminal关了,那么程序就会终止,这是SIGHUP信号的原因,即使通过bg置为后台运行同样会如此,应该让程 ...

  4. 【java】 linux下利用nohup后台运行jar文件包程序

    Linux 运行jar包命令如下: 方式一: java -jar XXX.jar 特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 那如何让窗口不锁定? 方式二 ...

  5. linux scp 后台运行,Linux scp 设置nohup后台运行

    Linux scp 设置nohup后台运行 1.正常执行scp命令 从oradb30机器拷贝一个文件夹到oradb31机器: scp -r /u01/media/Disk1/ 192.168.1.31 ...

  6. Java程序后台运行,即使关掉Putty终端

    Java程序后台运行,即使关掉Putty终端 比如,通过Putty启动远程主机上面的文件 java -cp Crawler.jar Main& 关闭Putty终端之后,这个java程序也会被中 ...

  7. 【OS】Linux命令如何放到后台运行

    [OS]Linux命令如何放到后台运行 linux命令后台运行  有两种方式:    1. command & : 后台运行,你关掉终端会停止运行    2. nohup command &a ...

  8. 【genius_platform软件平台开发】第七十九讲:Linux系统中可执行程序后台运行的几种方式

    [genius_platform软件平台开发]第七十九讲:Linux系统中可执行程序后台运行的几种方式 1. 问题描述 2. & 符号 3. nohup指令 4. ctrl + z.jobs. ...

  9. LabVIEW应用程序后台运行

    目录 1.隐藏VI前面板窗口 2.隐藏任务栏图标 本篇博文分享LabVIEW虽然不常用但是很有意思的一个开发技巧:应用程序后台运行.运行程序后自动隐藏前面板窗口和任务栏图标. 实现方法依旧很简单,分为 ...

最新文章

  1. 听说我们的元宵节,跟别人的不一样...
  2. 润乾实现简单自定义动态列报表
  3. 注意语句顺序 防止Servlet Request Response乱码
  4. 链表的建立,搜索,插入,反转,销毁以及合并有序链表。
  5. SpringSecurity认证用户状态的判断
  6. weblogic 12 开启debug端口配置
  7. js设置html不可编辑状态,JS_设置弹出页面的地址栏不可编辑
  8. svn--Eclipse版本的安装步骤
  9. 求10000以内n的阶乘(openjudge 2923)
  10. Mysql 分组聚合实现 over partition by 功能
  11. 英文java简历模板下载_JAVA技术人员英文简历模板
  12. IIS的ISAPI接口
  13. cannot be applied to
  14. Angular 里使用 FormControl 的步骤
  15. Java Reference Objects or How I Learned to Stop Worrying and Love OutOfMemoryError
  16. python计算球体体积_如何在Python中用MonteCarloMethod计算10维球体的体积?
  17. Samara SAU ACM ICPC Quarterfinal Qualification Contest 2012
  18. 交换机半双工通信测试
  19. Encoder-Decoder自动生成对联,要试试么?
  20. (总结)密码破解之王:Ophcrack彩虹表(Rainbow Tables)原理详解(附:120G彩虹表下载)

热门文章

  1. ubuntu编译linux报错/bin/sh: 1: mkimage: not found
  2. tftp下载内核和文件系统
  3. 数据库自动收缩带来的严重问题
  4. ant-design-pro Login 组件 实现 rules 验证
  5. 探索移动端的搜索设计
  6. 前端面试问题(持续更新)
  7. python开源项目及示例代码
  8. 【BZOJ】2333: [SCOI2011]棘手的操作
  9. windows 7 在使用无线路由或者插线出现×××感叹号排除方法
  10. P1912 [NOI2009]诗人小G