Linux学习笔记5

   exit()和_exit() 区别:函数库中有缓冲I/O的操作,是printf,fopen,fwrite,fread等,使用这些函数都会在系统中产生数据缓冲区,读文件会把内容放在文件缓冲区,下次读可以直接从缓冲区读写。写文件也是写到文件缓冲区,等待一个/n和文件结束符EOF,才会将所有内容真正一次写入文件中。这会大大提高读写速度。而exit会检查缓冲区将文件缓冲区的内容写回文件,而_exit是直接关闭。一个进程在调用exit之后会留下一个僵尸进程。在以下情况下使用_exit(),将清理工作交给父进程 早子进程中调用exec失败后不曾调用exec的子进程

int main()
{
  printf("Using exiting...\n");
  printf("This is the content in buffer");
  exit(0);//_exit(0)   /*第一个结果为 两句话,第二个结果为一句话
}

wait()是特殊的waitpid()     waitpid()等待参数pid特定的子进程退出,而wait等待任意一个子进程退出;二者一出来就会寻找已经变成僵尸进程的子进程,如果没有就等待或者结束   wait(NULL)返回子进程结束状态值,不关心设为NULL    WEXITSTATUS(status)用来提取子进程的返回值,WIFEXITED(status)用来判断,当返回0时,进程不是正常返回,上个值没有意义

lockf(fd,功能选择,字数) fd是文件内容,功能选择为1时是上锁,0是解锁  字数:锁定和开锁的字节数,0是全文

信号通信 

一个进程收到一个信号和一个处理器收到一个中断请求是相同的,信号是异步的,一个进程不必通过任何操作来等待信号的到达,信号是通信过程中唯一的异步通信机制,通知进程有哪些事情发生了      

进程对信号进行3种可能的操作:忽略信号,捕捉信号(执行相应处理函数),执行默认操作。  由sigaction结构体和函数决定是哪个操作。发出信号的多个原因

信号中的kill函数:终止进程或向进程发送其他信号   kill(PID,信号)进程号多种多样可以群发    raise函数,向进程本身发送信号      alarm(时间)专门为SIFALRM信号制定,时钟定时信号   

消息队列

ftok函数生成key,参数为现存文件和项目ID    msgget函数 创建或打开的队列 参数为key和flag标志位      创建队列的两种方法     msgctl函数 对消息队列执行多种操作     msgsnd函数  将数据放到消息队列   msgrcv函数 将消息取出消息队列

Linux守护进程

创建子进程,退出父进程   在子进程中使用setsid函数摆脱从父进程那继承过来的会话期 进程组 控制终端      改变当前工作目录为根目录上   使用umask函数重设文件权限掩码    关闭文件描述符     可以fork两次,不是必须   害怕后期误操作打开终端,只有会话首进程会能打开终端


猜你喜欢

转载自blog.csdn.net/beautifu1_boy/article/details/80547476