[ZZ]如何将程序以Daemon方式运行?
2008-04-24 09:54
399 查看
如何将程序以Daemon方式运行?
以Daemon方式运行的程序,在运行过程中与控制台无关,即不受控制台信号影响,在控制台退出后也继续保持运行,而其他非Daemon程序会受控制台操作影响,并在控制台退出时被强行退出。因此网络服务程序绝大多数都是以Daemon方式运行。
可以在程序初始化时加入以下语句,则程序将以Daemon方式运行:
/**//* 生成一个新的进程并将原来的主进程退出 */
if(fork()) exit(0);
/**//* 关闭 stdin, stdout, stderr 等控制台句柄 */
for (n = 0; n<3; n++) close(n);
/**//* 将 stdin, stdout和stderr均指向/dev/null */
open("/dev/null", O_RDONLY);
dup2(0,1);
dup2(0,2);
/**//* 设置tty的I/O属性 */
if((n=open("/dev/tty",O_RDWR)) > 0) ...{
ioctl(n, TIOCNOTTY, 0) ;
close(n);
}
/**//* 创建一个新的session,使当前进程成为一个process greoup的leader */
setsid();
/**//* 生成一个新的进程并将刚才生成的进程退出,这个新的进程已经以daemon方式运行了 */
if(fork()) exit(0);
以Daemon方式运行的程序,在运行过程中与控制台无关,即不受控制台信号影响,在控制台退出后也继续保持运行,而其他非Daemon程序会受控制台操作影响,并在控制台退出时被强行退出。因此网络服务程序绝大多数都是以Daemon方式运行。
可以在程序初始化时加入以下语句,则程序将以Daemon方式运行:
/**//* 生成一个新的进程并将原来的主进程退出 */
if(fork()) exit(0);
/**//* 关闭 stdin, stdout, stderr 等控制台句柄 */
for (n = 0; n<3; n++) close(n);
/**//* 将 stdin, stdout和stderr均指向/dev/null */
open("/dev/null", O_RDONLY);
dup2(0,1);
dup2(0,2);
/**//* 设置tty的I/O属性 */
if((n=open("/dev/tty",O_RDWR)) > 0) ...{
ioctl(n, TIOCNOTTY, 0) ;
close(n);
}
/**//* 创建一个新的session,使当前进程成为一个process greoup的leader */
setsid();
/**//* 生成一个新的进程并将刚才生成的进程退出,这个新的进程已经以daemon方式运行了 */
if(fork()) exit(0);
相关文章推荐
- 使用apache daemon让java程序在unix系统上以服务方式运行
- 使用apache daemon让java程序在unix系统上以服务方式运行
- Linux环境中以daemon方式运行的程序生成core dump
- Linux中如何让进程(或正在运行的程序)到后台运行?[zz]
- Linux环境中以daemon方式运行的程序生成core dump
- 如何让docker以daemon方式运行/bin/bash
- [VB.NET]VB.net有窗体程序如何以系统服务方式运行?
- Linux环境中以daemon方式运行的程序生成core dump
- 使用apache daemon让java程序在unix系统上以服务方式运行
- 使用 SSH 远程连接运行图形界面程序(zz from ubuntu forum)
- 如何利用 JConsole观察分析Java程序的运行,进行排错调优(转)
- Android按返回键程序仍在后台运行,并未完全退出和销毁,类似微信QQ等退出方式的实现-- moveTaskToBack
- 在VC中如何使程序开机时自动运行
- 如何分布式运行mapreduce程序
- ARMSYS2410-MULTIUAR 如何让系统启动时自动运行用户程序
- 如何用crontab运行一个图形化界面的程序
- 如何在VC中通过添加资源文件,使程序在Vista上用管理员权限运行
- 如何防止一个程序运行多次
- Ubuntu 开机如何自动运行程序
- 如何以Root方式运行Xcode