x守护进程(daemon)是一类在后台运行的特殊进程,用于执行特定的系统任务。很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭。另一些只在需要的时候才启动,完成任务后就自动结束。
守护进程(daemon)是生存期长的一种进程,没有控制终端。
它们常常在系统引导装入时启动,仅在系统关闭时才终止。UNIX系统有很多守护进程,守护进程程序的名称通常以字母“d”结尾:例如,syslogd 就是指管理系统日志的守护进程。通过ps进程查看器 ps -efj 的输出实例,内核守护进程的名字出现在方括号中.
需要注意的是,用户层守护进程的父进程是 init进程(进程ID为1),从上面的输出PPID一列也可以看出,内核守护进程的父进程并非是 init进程。对于用户层守护进程, 因为它真正的父进程在 fork 出子进程后就先于子进程 exit 退出了,所以它是一个由 init 继承的孤儿进程。
pid_t setsid(void)
)建立一个会话。
xxxxxxxxxx
pid_t setsid(void);
代码
xxxxxxxxxx
int main() {
pid_t pd;
while ((pd = fork()) == -1); //一直创建子进程知道成功
if (pd) exit(1); //结束父进程
while ((pd = setsid()) == -1); //创建新会话,返回会话id.
printf("new session id is %d\n", pd);
if (chdir("/") == -1) { //切换到根目录
perror("chdir");
exit(1);
}
close(0); //关闭标准输入
open("/dev/null", O_RDWR); //切换到黑洞,可读可写
//标准输出、标准错误输出切换到黑洞
dup2(0, 1);
dup2(0, 2);
//任务
while (1) sleep(1); //睡觉
return 0;
}
利用以下命令查看进程
xxxxxxxxxx
ps ajx
kill -9 pid //杀死进程