#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是马上结束进程。