首页 / LINUX / linux系统编程之进程(五)
linux系统编程之进程(五)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了linux系统编程之进程(五),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2764字,纯文字阅读大概需要4分钟。
内容图文
![linux系统编程之进程(五)](/upload/InfoBanner/zyjiaocheng/1211/e14c186e1c6a4128abf0789a793b9d37.jpg)
今天继续学习系统编程,学习的主题还是进程,今天主要讨论的是守护进程相关的概念,开始进入正题:
#include <unistd.h> #include <sys/stat.h> #include <sys/wait.h> #include <sys/types.h> #include <fcntl.h> #include <stdlib.h> #include <stdio.h> #include <errno.h> #include <string.h> #include <signal.h> #define ERR_EXIT(m) do { perror(m); exit(EXIT_FAILURE); } while(0) int setup_daemon(void); int main(int argc, char *argv[]) { return0; } int setup_daemon(void) { pid_t pid; pid = fork(); if (pid == -1) ERR_EXIT("fork error"); if (pid > 0)//将父进程退出,保证子进程不是进程组组长 exit(EXIT_SUCCESS); setsid();//如果走到这,代表是子进程,由于它不是一个进程组组长,所以可以创建一个新的会话期 return0; }
当我们用setsid()创建一个新的会话期之后,会有一个什么样的影响呢,还是接着看它的说明介绍:
也就是如下图所示:
其实上面的程序就已经实现了一个守护进程,我们调用一下运行看下:
编译运行:
我们来查看下进程:
守护进程通常是在系统运行而运行的,通常将当前目录改为根目录,因为有可能守护进程是在某个shell提示符下运行的, 那么当前目录就是shell提示符所在的目的, 就拿我们创建的这个守护进程而言,它的当前目录为:
这样,系统管理员就无法umount这个目录,因为守护进程是学期在后期运行的,这个目录不应该作为它的环境,所以这就产生了创建守护进程的第四个步骤:
修改代码:
最后还有一个步骤:
【说明:/dev/null表示空设备,这里就是把日志记录到空设备里,就是不记录日志。】
怎么做呢?先看代码:
这时再运行,如果我们往屏幕输出内容,这时是看不到内容的,因为已经将标准输出重定向了空设备:
【说明:关于dup的知识,可参考博文:http://www.cnblogs.com/webor2006/p/3498443.html】
#include <unistd.h> #include <sys/stat.h> #include <sys/wait.h> #include <sys/types.h> #include <fcntl.h> #include <stdlib.h> #include <stdio.h> #include <errno.h> #include <string.h> #include <signal.h> #define ERR_EXIT(m) do { perror(m); exit(EXIT_FAILURE); } while(0) int setup_daemon(int nochdir, int noclose);//模拟系统创建守护进程的函数声明 int main(int argc, char *argv[]) { setup_daemon(1, 1);//这时改用跟调用系统创建守护进程的自己实现的函数 printf("test ...\n"); for (;;) ; return0; } int setup_daemon(int nochdir, int noclose) { pid_t pid; pid = fork(); if (pid == -1) ERR_EXIT("fork error"); if (pid > 0) exit(EXIT_SUCCESS); setsid(); if (nochdir == 0)//实现很简单,做下参数判断既可 chdir("/"); if (noclose == 0) { int i; for (i=0; i<3; ++i) close(i); open("/dev/null", O_RDWR); dup(0); dup(0); } return0; }
编译运行:
【提示:在创建守护进程时,不重定向至空设备其实对于开发期间便于调试,如果等程序发布了之后,就得重定向了!】
原文:http://www.cnblogs.com/webor2006/p/3514552.html
内容总结
以上是互联网集市为您收集整理的linux系统编程之进程(五)全部内容,希望文章能够帮你解决linux系统编程之进程(五)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。