1. 程式人生 > >進程控制之孤兒進程

進程控制之孤兒進程

ack ask trac view nis shee csdn tis edit

#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 );

? ? }

? ? fprintf( stderr, "孤兒進程[%d]\n", getpid() );
? ? signal( SIGHUP, SIG_IGN );
? ? signal( SIGQUIT, SIG_IGN );
? ? signal( SIGCHLD, SIG_IGN );

? ? setsid();
? ? umask( 0 );

? ? return 0;

}

進程控制之孤兒進程