#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. java面试题之java中用到的线程调度算法是什么

    抢占式.一个线程用完CPU之后,操作系统会根据线程优先级.线程饥饿情况等数据算出一个总的优先级并分配下一个时间片给某个线程执行. 操作系统中可能会出现某条线程常常获取到VPU控制权的情况,为了让某些优 ...

  2. bzoj1143/2718 祭祀river(最大独立集)

    [CTSC2008]祭祀river Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2175  Solved: 1098[Submit][Status] ...

  3. javascript之进阶

    一 模态框 1 什么是模态框 模态框(Modal)是覆盖在父窗体上的子窗体.指在用户想要对对话框以外的应用程序进行操作时,必须首先对该对话框进行响应.如单击[确定]或[取消]按钮等将该对话框关闭. 2 ...

  4. LFYZOJ 104 Counting Swaps

    题解 #include <iostream> #include <cstdio> #include <algorithm> #include <cmath&g ...

  5. 計算 battery impedence

    Origin 一顆電池被拉載後,會產生電流及電壓如下圖, 如何計算其電池內阻呢 其公式為 R = |delta(V) / delta(I)| 公式推導如下: V1 = 10 - I1R --- 左圖 ...

  6. html5(拖拽2)

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  7. react-native 判断是不是IPhone X

    import { Platform, Dimensions } from 'react-native'; // iPhoneX const X_WIDTH = 375; const X_HEIGHT ...

  8. PAT 甲级 1045 Favorite Color Stripe(DP)

    题目链接 Favorite Color Stripe 题意:给定$A$序列和$B$序列,你需要在$B$序列中找出任意一个最长的子序列,使得这个子序列也是$A$的子序列 (这个子序列的相邻元素可以重复) ...

  9. Python通用编程

    本文是Python通用编程系列教程,已全部更新完成,实现的目标是从零基础开始到精通Python编程语言.本教程不是对Python的内容进行泛泛而谈,而是精细化,深入化的讲解,共5个阶段,25章内容.所 ...

  10. 3.eclipse中 maven打包web工程几种方式

    1.右键项目-export 选择war file导出即可 2.第二种:右键项目-RUN AS -maven build..goals填入:clean package 第三种方式:右键项目.选择Debu ...