守护进程
后台进程----没有输入输出 / 无法转移前台
周期性的在后台等待或执行某个任务
制作守护进程的步骤:7大步
1>创建子进程,结束父进程
---->为了会话做准备>组长无法成为会话
2>设置当前子进程为一个会话/终端
---->为了摆脱原终端影响
3>创建子进程,结束父进程
---->彻底摆脱父子进程间的影响
------------守护进程雏形制作完毕
4>关闭所有文件描述符
---->为第7步做准备
5>改变执行目录
---->进程不影响目录的其他操作
6>修改权限掩码
---->进程创建文件不受权限影响
7>文件描述符重定向
---->彻底移除进程的0 1 2 功能
printf scanf perror
无名管道
仅用于父子/拥有血缘关系 进程间通信
是利用文件描述符指定读写方向来进行通信的
pipe 头文件:#include <unistd.h>
int pipe(int pipefd[2]);功能:无名管道
参数:pipefd[2]: ---->文件描述符
[0]---->读
[1]---->写
返回值:成功返回0 失败返回-1,并设置错误码
有名管道
用于任意进程间通信
是利用我们之前学习的p管道文件实现的
1>创建管道
2>双方打开管道后,在管道力进行读写操作
3>最好不要放在共享文件夹下运行
mkfifo 头文件:#include <sys/types.h> <sys/stat.h>
int mkfifo(const char *pathname,mode_t mode); 功能:创建有名管道
参数:pathname:有名管道的名称 mode:创建有名管道的权限 0666
返回值:成功返回0,失败返回-1,并设置错误码
#include <unistd.h>
int access(const char *pathname, int mode);
功能:
判断文件状态
参数:
pathname:文件名称
mode:
F_OK:文件存在
R_OK:文件可读
W_OK:文件可写
X_OK:文件可执行
返回值:
成功返回0
失败返回-1,并设置错误码
信号
异步通知 函数
kill--->发送信号 头文件:#include <sys/types.h> <signal.h>
int kill(pid_t pid,int sig); 功能:发送信号
参数:PID:给谁发 sig:信号
返回值:成功返回0 失败返回-1,并设置错误码
atoi 头文件:#include <stdlib.h>
int atoi(const char *nptr); 功能:将字符串转化为整型
参数:nptr:字符串
返回值:成功返回整型 失败返回-1,并设置错误码
信号注册
signal 头文件:#include <signal.h>
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum,sighandler_t handler) 功能:信号注册
参数:signum:信号
handler:事件
SIG_IGN:忽略
SIG_DFL:默认
信号捕捉:执行某一个自己写的函数 void(*)(int)
返回值:成功返回sighandler_t 失败返回SIG_ERR,并设置错误码