linux服务器- 如何写后台进程
来源:互联网 发布:适合写日记的软件 编辑:程序博客网 时间:2024/05/22 03:07
区别于浏览器等展示性程序,运行于Linux系统上的网络服务器进程不需要前台展示,只需后台运行。此类进程即为Daemon进程(又叫精灵进程)。如Mysqld,Apached等。
Daemon进程实际为父进程fork()出来的子进程。但是会断开与控制终端的联系。
方法一:使用C系统函数daemon。
系统函数daemon可以使进程脱离控制终端,在系统后台以系统daemon的方式运行。
#include <unistd.h>int daemon(int nochdir, int noclose);//nochdir:如果该参数值为0,则讲进程的当前路径修改为跟路径“/”。否则不变。//noclose:如果该参数值为0,则重定向标准输入,标准输出,标准出错到系统空洞设备/dev/null(此时,进程不会向文件描述符1和2输出信息,也不会从0接收输入)。否则不做改变。直接调用daemon函数,是最简单的写出后台进程的方法。
方法二:自己实现daemon函数。
int daemon_my(int nochdir, int noclose){ //Clear file creation mask umask(0); //Get maximum number of file descriptors. struct rlimit rl; if(getrlimit(RLIMIT_NOFILE, &rl) < 0) return -1; pid_t pid; if((pid=fork()) < 0) { return -1; } else if(0 != pid) { exit(0); } //child 1 continues... //become session leader if(setsid() < 0) { return -1; } signal(SIGHUP, SIG_IGN); if((pid=fork()) < 0) { return -1; } else if(0 != pid) { exit(0); } //child 2 continues... //change working directory if(0==nochdir) { chdir("/"); } //Close all open file descriptors. if (rl.rlim_max == RLIM_INFINITY) rl.rlim_max = 1024; for (i = 0; i < rl.rlim_max; i++) close(i); //redirect stdin,stdout,stderror to "/dev/null" int fd0, fd1, fd2; if(0==noclose) { fd0 = open("/dev/null", O_RDWR); fd1 = dup(0); fd2 = dup(0); } return 0;}例子程序。可以写一个最简单的例子程序验证。
/*test_daemon.c*/#include <unistd.h>int main(){ printf("i am father...\n"); daemon(0, 0); sleep(10); printf("i am child...\n"); return 0;}编译运行。屏幕输出:i am father...
然后转入后台。
ps 可以查看到进程还在运行。10s后结束运行。“i am child...”并没有输出到终端,这是因为调用daemon(,)函数时已经指定将stdout输出到/dev/null。
可以修改程序测试。
一般,运行后台进程时,在进程名后加“&”。也可以在程序中通过参数控制。
ok,写后台程序就是这么简单。
- linux服务器- 如何写后台进程
- linux如何后台运行进程
- Linux服务器程序后台化,守护进程
- 如何让进程在Linux后台运行
- 如何让进程在Linux后台运行
- Linux环境下如何终止后台进程
- 如何写一个Linux精灵进程
- 如何写一个linux精灵进程
- Linux系统编程:如何写Daemon进程(守护进程)
- Unix/Linux如何创建一个后台进程(run background process)
- linux 后台进程如何不受shell退出的影响
- 关于linux后台运行进程如何屏蔽ctrl+z
- linux 前台进程 后台进程
- Linux 后台服务进程
- linux进程后台管理
- Linux后台进程管理
- LINUX后台进程管理
- linux后台执行进程
- "..\..\source\ucos_ii.h"的含义
- jadclipse设置,这个解决了问题
- Linux设备驱动子系统第一弹 - I2C
- Streams流复制的异常检测
- 【研发管理】全面质量管理之石川馨
- linux服务器- 如何写后台进程
- Linux设备驱动子系统第二弹 - SD卡
- 解决 Windows Vista /7无线上网问题
- 基于JMF RTP的网络传输媒体流
- Linux系统新手学习的11点建议
- Self-Learning: ALTER DATABASE (SQL Azure Database)
- 强烈推荐:C/C++语言编程必备网址
- 设置 GridView item 背景透明
- 观察者设计模式(observer)