linux的进程学习
wait函数和waitpid函数,函数原型: pid_t wait(int *status )
status是一个整型指针,指向的对象用来保护子进程退出时的状态。例如: pid = wait(&status)
这status假设为 0x0400,说明 第一个字节保存的是中断信号的编号,倒数第二个字节是保存exit()中的数字。
函数的返回值成功返回的是子进程的进程号,失败返回-1;
调用wait函数的意义是使进程阻塞,直到任意一个子进程结束或者是该进程直接收到一个信号为止。如果该进程没有
子进程或者其子进程已经结束,wait函数会立即返回。
waitpid(pid_t pid,int * status,int options)
waitpid函数和wait函数类似,waitpid函数可以指定等待某个子进程
pid = -1,等待任意子进程;=0,等待本组ID中的子进程;《-1,其他组子进程
options:WNOHONG 若pid指定的进程并不立即可用,则waitpid不阻塞,此时返回值为0
WUNTRACED
0,等同wait
Linux守护进程,也就是通常说的Daemon进程,是Linux中断后台服务进程它是一个长期生存的进程,通常独立于控制终端
并且周期性的执行某种任务或等待处理某些发生的事件。
守护进程常常在系统启动时候开始运行,在系统关闭时候才终止。
linux守护进程的编写步骤:
1.创建子进程,父进程退出
2.在子进程中创建新的会话
3.改变当前目录为根目录
4.重置文件权限掩码
5.关闭文件描述符。
1.pid = fork()
if(pid >0)
{
exit(0);
}
setsid();//用于创建一个新的会话,并使得当前的进程成为新会话组的组长,是进程完全独立出来,从而脱离其他进程的控制
chdir("/");//在进程运行过程中,当前目录所在的文件系统是不能卸载的
unmask(0);//设置文件权限为0,可以增加守护进程的灵活性
fdablesize = getdtablesize();
for(fd = 0;fd< fdtablesize;fd++)
close(fd);
结束!