#include<stdio.h>

#include<sys/types.h>

#include<sys/wait.h>

#include<unistd.h>

#include<signal.h>





int main( void )

{

    daemon_init();



    fprintf(stderr, "main进程[%d]\n", getpid() );

    while( 1 )

    {

    }



    exit(0);

}





int daemon_init()

{

    pid_t pid;



    if( getppid() == 1 )

    {

umask( 0 );

return 0;

    }





    if( (pid = fork()) < 0 )

    {

        fprintf(stderr, "fork err!\n");

        return -1;

    }

    else if( pid > 0 )

    {

        fprintf( stderr, "结束进程[%d]\n", getpid() );

        //exit( 0 );

return 0;

    }



    fprintf( stderr, "孤儿进程[%d]\n", getpid() );

    signal( SIGHUP, SIG_IGN );

    signal( SIGQUIT, SIG_IGN );

    signal( SIGCHLD, SIG_IGN );



    setsid();

    umask( 0 );



    return 0;

}

30行假设为exit( 0 ),执行结果:

孤儿进程[9777]

main进程[9777]

结束进程[9776]

假设将30行的exit( 0 )替换为return 0,执行结果:

孤儿进程[9777]

main进程[9777]

结束进程[9776]

main进程[9776]

这就体现了return和exit的差别之中的一个。return是逐层退出,而exit是马上结束进程。

return和exit的差别的更多相关文章

  1. linux之return和exit引发的大问题(vfork和fork)

    在coolshell.cn上看到的一个问题.为此拿来研究一下. 首先 看看return和exit的差别 在linux上分别跑一下这个代码 int main() { return 0; //exit(0 ...

  2. return和exit函数的区别

    在上Linux课的时候,老师提到一句,调用vfork产生的子进程就是为了使用exec族函数来执行其他的代码逻辑. 在子进程退出的时候有两种方式,exit和exec族函数,不能使用return,为什么不 ...

  3. 关于return和exit

    关于return和exit 在子进程退出的时候有两种方式,exit和exec族函数,不能使用return,为什么不能用return呢,exit改成return 会出现父子进程又各自重复开始进行. 1. ...

  4. 理解 break, continue, return 和 exit

    你们知道 “break”, “continue”, “return” 和 “exit”的作用吗? 它们是功能强大的语言结构体.下面通过一个测试函数来说明它们之间的不同. 1 2 3 4 5 6 7 8 ...

  5. Linux编程return与exit区别

    Linux编程return与exit区别 exit  是用来结束一个程序的执行的,而return只是用来从一个函数中返回. return return 表示从被调函数返回到主调函数继续执行,返回时可附 ...

  6. DevC++ return 1 exit status

    当使用DevC++时编译运行程序出现 return 1 exit status 有可能是因为有在运行的命令窗口未关闭.

  7. Windows下return,exit和ExitProcess的区别和分析

    通常,我们为了使自己的程序结束,会在主函数中使用return或调用exit().在windows下还有ExitProcess()和TerminateProcess()等函数. 本文的目的是比较以上几种 ...

  8. C++中的return和exit区别

    在main函数中,return和exit经常混用,两者的一个区别:return会执行statck unwinding,而exit不会.如果触发了信号,exit也同样不会做stack unwinding ...

  9. oracle 存储过程循环体中的return和exit区别:

    oracle 存储过程循环体中的return和exit区别:   (1) return 跳出整个循环,终止该循环, 后面的不再执行.     相当于 Java 中的break;   (2)  exit ...

随机推荐

  1. C# 实现图像快速 水平 垂直 翻转

    C#  图像水平,垂直翻转的方法,速度很快 重新把图像绘制成翻转的方法 /// <summary> /// 图像水平翻转 /// </summary> /// <para ...

  2. Codevs 3578 无线网络发射器选址== NOIP 2014 Day2 T1

    3578 无线网络发射器选址 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 白银 Silver 题目描述 Description 随着智能手机的日益普及,人们对无线网的需求日益增大. ...

  3. 【Codevs1034】家园(最大流,裂点)

    题意:由于人类对自然的疯狂破坏,人们意识到在大约2300年之后,地球不能再居住了,于是在月球上建立了新的绿地,以便在需要时移民.令人意想不到的是,2177年冬由于未知的原因,地球环境发生了连锁崩溃,人 ...

  4. watch watch watch the video! I got almost addicted. Oh what a fuck!!!!

    http://v.huya.com/play/574329.html#relate_vid=570467

  5. float 常见用法与问题--摘抄

    float 属性绝对是众多切图仔用的最多的 CSS 属性之一,它的用法很简单,常用值就 left.right.none 三个,但是它的特性你真的弄懂了吗? 我会在这里介绍我对 float 的认识与使用 ...

  6. C++的静态联编和动态联编详解

    一.概述: 通常来说联编就是将模块或者函数合并在一起生成可执行代码的处理过程,同时对每个模块或者函数调用分配内存地址,并且对外部访问也分配正确的内存地址,它是计算机程序彼此关联的过程.按照联编所进行的 ...

  7. AC日记——2条不相交的路径 51nod 1076

    1076 2条不相交的路径 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 给出一个无向图G的顶点V和边E.进行Q次查询,查询从G的某个顶点V[s] ...

  8. awk在企业中最常用的语句

    awk最常用以及面试基本都会被问到的实例: A.统计日志中每个URL被访问的次数 cat access.log http://www.etiantian.org/1.html http://post. ...

  9. 弹出层layer演示 以及在编写弹出层时遇到的错误

    实现的功能: 首先第一步 在官方下载layer的文件.layUI官网:http://layer.layui.com/     http://layer.layui.com/ layer文件的下载步骤如 ...

  10. spring-mvc 的一些使用技巧(转)

    APP 服务端的 Token 验证 通过拦截器对使用了@Authorization注解的方法进行请求拦截,从 http header 中取出 token 信息,验证其是否合法.非法直接返回 401 错 ...