linux c daemon 程序后台运行函数
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 程序后台运行函数相关推荐
- Linux下让程序后台运行
Linux下优雅的让程序后台运行 假设在终端上启动运行了一个程序,跑了几天,如果不小心把terminal关了,那么程序就会终止,这是SIGHUP信号的原因,即使通过bg置为后台运行同样会如此,应该 ...
- linux下设置程序后台运行,linux中如何让进程在后台运行
一. nohup / setsid / & 使用场景: 如果只是临时有一个命令需要长时间运行,什么方法能最简便的保证它在后台稳定运行呢? 我们的解决办法就有两种途径:要么让进程忽略 HUP 信 ...
- Linux下优雅的让程序后台运行
Linux下优雅的让程序后台运行 假设在终端上启动运行了一个程序,跑了几天,如果不小心把terminal关了,那么程序就会终止,这是SIGHUP信号的原因,即使通过bg置为后台运行同样会如此,应该让程 ...
- 【java】 linux下利用nohup后台运行jar文件包程序
Linux 运行jar包命令如下: 方式一: java -jar XXX.jar 特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 那如何让窗口不锁定? 方式二 ...
- linux scp 后台运行,Linux scp 设置nohup后台运行
Linux scp 设置nohup后台运行 1.正常执行scp命令 从oradb30机器拷贝一个文件夹到oradb31机器: scp -r /u01/media/Disk1/ 192.168.1.31 ...
- Java程序后台运行,即使关掉Putty终端
Java程序后台运行,即使关掉Putty终端 比如,通过Putty启动远程主机上面的文件 java -cp Crawler.jar Main& 关闭Putty终端之后,这个java程序也会被中 ...
- 【OS】Linux命令如何放到后台运行
[OS]Linux命令如何放到后台运行 linux命令后台运行 有两种方式: 1. command & : 后台运行,你关掉终端会停止运行 2. nohup command &a ...
- 【genius_platform软件平台开发】第七十九讲:Linux系统中可执行程序后台运行的几种方式
[genius_platform软件平台开发]第七十九讲:Linux系统中可执行程序后台运行的几种方式 1. 问题描述 2. & 符号 3. nohup指令 4. ctrl + z.jobs. ...
- LabVIEW应用程序后台运行
目录 1.隐藏VI前面板窗口 2.隐藏任务栏图标 本篇博文分享LabVIEW虽然不常用但是很有意思的一个开发技巧:应用程序后台运行.运行程序后自动隐藏前面板窗口和任务栏图标. 实现方法依旧很简单,分为 ...
最新文章
- 听说我们的元宵节,跟别人的不一样...
- 润乾实现简单自定义动态列报表
- 注意语句顺序 防止Servlet Request Response乱码
- 链表的建立,搜索,插入,反转,销毁以及合并有序链表。
- SpringSecurity认证用户状态的判断
- weblogic 12 开启debug端口配置
- js设置html不可编辑状态,JS_设置弹出页面的地址栏不可编辑
- svn--Eclipse版本的安装步骤
- 求10000以内n的阶乘(openjudge 2923)
- Mysql 分组聚合实现 over partition by 功能
- 英文java简历模板下载_JAVA技术人员英文简历模板
- IIS的ISAPI接口
- cannot be applied to
- Angular 里使用 FormControl 的步骤
- Java Reference Objects or How I Learned to Stop Worrying and Love OutOfMemoryError
- python计算球体体积_如何在Python中用MonteCarloMethod计算10维球体的体积?
- Samara SAU ACM ICPC Quarterfinal Qualification Contest 2012
- 交换机半双工通信测试
- Encoder-Decoder自动生成对联,要试试么?
- (总结)密码破解之王:Ophcrack彩虹表(Rainbow Tables)原理详解(附:120G彩虹表下载)