一、fork()
#unistd.h
pid_t fork();
拷贝父进程,子进程的fork不执行,返回0,执行fork之后的所有代码
父进程的fork返回子进程pid
二、getpid()
getpid()
#获得当前进程的pid
getppid();
#获得当前进程的父进程的pid
父子进程无论谁,对源代码都是读时共享,写时复制
三、wait()
#include<sys/wait.h>
int status;
pid_t wpid=wait(&status);//回收子进程,并获取回收状态于status
查看status
WIFEXITED 查看子进程是否正常退出,如果为真,调用
WEXITSTATUS //查看子进程正常推出的返回值
WIFSIGNALED 查看子进程是否异常退出,如果为真,调用
WTERMSIG //查看杀死子进程的编号
四、waitpid()
pid_t waitpid(pid_t pid,int *status,int option);
//pid=-1,回收任意子进程,相当于wait
//pid=0,回收所有子进程
//加强版wait,可以选择干掉特定的子进程,option用来指定非阻塞WNOHANG
五、守护进程
不受用户终端控制,循环做某件事的进程,创建时不能由组长创建
创建步骤:
- fork子进程,关闭父进程
- 子进程调用setsid() 创建会话 (脱离终端)
- chdir(),改变目录,防止被卸载
- 设置umask,022--755
- 关闭/重定向(dup2)文件描述符到dev/null
- 编写业务逻辑
网友评论