linux 进程 控制终端,linux系统编程之进程(五):终端、作业控制与守护进程
#include#define ERR_EXIT(m)
do {
perror(m);
exit(EXIT_FAILURE);
} while(0)
int setup_daemon(int, int);
/* 守护进程一直在后台运行且无控制终端 */
int main(int argc, char *argv[])
{
// daemon(0, 0)
setup_daemon(0, 0);
printf("test ...
"); // 无输出
for(;;) ;
return 0;
}
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的进程不能为进程组组长,故fork之后将父进程退出 */
setsid(); // 子进程调用后生成一个新的会话期
if (nochdir == 0)
chdir("/"); //更改当前目录为根目录
if (noclose == 0)
{
int i;
for (i = 0; i
close(i);
open("/dev/null", O_RDWR); // 将标准输入,标准输出等都重定向到/dev/null
dup(0);
dup(0);
}
return 0;
}
执行程序再ps axj 一下:
simba@ubuntu:~/Documents/code/linux_programming/APUE/process$ ./daemon
simba@ubuntu:~/Documents/code/linux_programming/APUE/process$ ps axj
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
...........................................................................................................................
1 7678 7678 7678 ? -1 Rs 1000 0:03 ./daemon
可以看出守护进程的ID也是进程组的ID,也是会话期的ID,此外这个会话期没有前台进程组。
五、使用daemon函数实现守护进程
功能:创建一个守护进程
原型:int daemon(int nochdir, int noclose);
参数:
nochdir:=0将当前目录更改至“/”
noclose:=0将标准输入、标准输出、标准错误重定向至“/dev/null”
注:也有一些说法,表示daemon 实现是fork 2 次,具体可以google fork 2 times daemon,据说主要是为了避免子进程的僵尸进程问题。
C++ Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
int daemon()
{
int fd;
pid_t pid;
if((pid = fork()) != 0)
{
exit(0);
}
setsid();
signal(SIGINT, SIG_IGN);
signal(SIGHUP, SIG_IGN);
signal(SIGQUIT, SIG_IGN);
signal(SIGPIPE, SIG_IGN);
signal(SIGTTOU, SIG_IGN);
signal(SIGTTIN, SIG_IGN);
signal(SIGCHLD, SIG_IGN);
signal(SIGTERM, SIG_IGN);
struct sigaction sig;
sig.sa_handler = SIG_IGN;
sig.sa_flags = 0;
sigemptyset(&sig.sa_mask);
sigaction(SIGPIPE,&sig,NULL);
umask(0);
if((pid = fork()) != 0)
{
exit(0);
}
fd = open("/dev/null", O_RDWR);
dup2(fd, STDIN_FILENO)
dup2(fd, STDOUT_FILENO)
return 0;
}
参考:《linux c 编程一站式学习》、《APUE》
linux 进程 控制终端,linux系统编程之进程(五):终端、作业控制与守护进程相关推荐
- 【Linux】Linux系统编程(入门与系统编程)(三)(深入理解操作系统、进程、环境变量、内存分布)
本博客操作系统最多涉及30%的理论,重点在于部分进程的内容,部分文件系统的内容,部分文件管理的内容不是主讲操作系统,我们的最终目的是理解系统中最高频的知识点,然后被完全利用指导我们编程. 下面是这三篇 ...
- Linux shell、内核及系统编程精品资料下载汇总 topsage
shell编程.sed.awk.grep相关: UNIX shell by Example 第四版 UNIX shell范例精解 (第4版) 中文高清PDF下载 Shell脚本学习指南(Classic ...
- 【Linux命令行与Shell脚本编程】第五章 理解 Shell 父子关系 后台进程 协程
Linux命令行与Shell脚本编程 第五章 理解 Shell 文章目录 Linux命令行与Shell脚本编程 五,理解 Shell 5.1,shell的类型 5.2,shell的父子关系 5.2.1 ...
- linux 声音控制 命令,linux 声音大小调整的命令
alsamixer 输入上面的命令 回车即可看到图形界面,界面如下 ┌──────────────────────────── AlsaMixer v1.0.27.1 ──────────────── ...
- linux scp控制带宽,Linux系统中安装使用Trickle来控制用户带宽
1. trickle介绍trickle是一款轻量级的用户空间带宽控制管理的工具,用来限制如浏览器Firefox等, FTP , SSH,curl,wget,scp等等使用网络带宽. trickle通过 ...
- linux系统编程之信号(五)
今天继续对信号进行学习,开始正入正题: sigaction函数: 安装信号之前我们已经学过一个函数:signal,它最早是在unix上出现的,它是对不可靠信号进行安装的,之后出现了可靠信号和实时信号, ...
- linux cache控制 内核,Linux内核中cache的实现
本文档的Copyleft归yfydz所有,使用GPL发布,可以自由拷贝,转载,转载时请保持文档的完整性, 1. 前言 kmem_cache是Linux内核提供的快速内存缓冲接口,这些内存块要求是大小相 ...
- linux cache控制 内核,linux内核之bcache简介 [转]
bcache是按照SSD特性来设计的,只按擦除桶大小进行分配,使用btree和日志混合方法来跟踪缓存数据,缓存数据可以是桶上的任意一个扇区.bcache最大程度上减少了随机写的代价,它按顺序填充一个桶 ...
- 嵌入式基于Linux电机控制,嵌入式linux下控制电机运动
1.使用串口GPP8,GPP12口控制电机运转引脚(1-1:停止:1-0:正转:0-1:反转) 驱动代码: #include //kernel.h以便使用printk()等函数 #include // ...
最新文章
- 年薪 50w,这门编程语言该怎么学?
- C++ - 编写一个从字符串转变成长整型的函数
- node.js初步探究
- netbsd配置gnome桌面
- 已经连接到空闲例程的解决方法
- 2020 年,哪些行业将会遭到 5G 洗礼?
- 计算机专业中职好就业不,内江计算机专业中职好不好
- uBLAS——Boost 线性代数基础程序库 (三)
- 很喜欢博客园这个平台
- LwIP协议栈的学习与应用
- 填充图案的边界线 插件_cad如何给填充图案添加边界线
- 2021超级热门引流红包裂变微信分享朋友圈广告游戏源码
- 纪念 | 永远的凌晨四点钟
- 有幸一睡鸿蒙窍,《嘲鼾睡》原文、译文、翻译、赏析、拼音、作者韩愈-舟山诗词网...
- 超全面的前端切图技巧,读这篇就够了
- js去除字符串的首尾的逗号
- MYSQL 文件目录,数据库的存储文件目录
- 微型计算机原理和接口技术试卷,2017-1微机原理和接口技术试卷A(答案)-.doc
- unity3dwebgl building之后没有反应_晚会是在考验明星临场反应吗?王源开场无伴奏阿云嘎差点原地跳舞...
- 使用电脑实现图片文字识别的方法
热门文章
- 的union_C语言“隐秘的角落”——union没那么简单
- 重启服务器之home下文件全没,小白宝典——树莓派实用工具分享(大神绕路)
- input onclick点击button无反应_热图分析:精确洞察用户点击偏好
- logback.xml 常用配置详解
- 亲手完成四大企业实战项目,挑战Python全栈高薪岗位!
- GitHub 3W 星,冲击热榜!超实用技术面试手册,看这篇就够了
- oracle无法重建em,ORACLE 11g, EM 无法启动的问题和重建
- 判断一组多选框至少有一个被选中_想不想拥有自己的篆刻印章?那就PS一个吧...
- Oracle11g rac监听,关于oracle11g RAC 监听器使用中出现的no services以及no listener分析...
- 拨号云服务器怎么自动配置网关_教你在阿里云创建增强型云网关