• UNIX环境高级编程——创建孤儿进程


    /* 
    创建孤儿进程 
          父进程终止后,向子进程发送挂断信号,又接着发送继续信号。 
    */  
    #include <stdio.h>  
    #include <stdlib.h>  
    #include <string.h>  
    #include <errno.h>  
    #include <signal.h>  
    #include <sys/types.h>  
    #include <unistd.h>  
    /* 处理接受到的挂断信号 */  
    static void sig_hup(int signo)  
    {  
            printf("SIGHUP recvived, pid = %d 
    ", getpid());  
    }  
    /* 打印进程ID、父进程ID、进程组ID、前台进程组ID */  
    static void pr_ids(char* name)  
    {  
            printf("%s: pid = %d, ppid = %d, pgrp = %d, tpgrp = %d 
    ",   
                    name, getpid(), getppid(), getpgrp(), tcgetpgrp(STDIN_FILENO));  
            fflush(stdout);  
    }  
    int main( int agrc, char* argv[])  
    {  
            char c;  
            pid_t pid;  
            pr_ids("parent");  // 打印主进程(父进程)信息  
            if ((pid = fork()) < 0)  
            {  
                printf("fork error
    ");  
                exit(-1);  
            }
    		else if( pid > 0) /* parent */  
            {// 在父进程中  
                sleep(5);  
                exit(0);  
            }
    		else /* child */  
            {// 在子进程中  
                pr_ids("child");  
                signal(SIGHUP, sig_hup); // 绑定挂断信号  
                kill(getpid(), SIGTSTP); // 向自己发送停止信号(Ctrl+Z),暂停进程  
                pr_ids("child");  
                if (read(STDIN_FILENO, &c, 1) != 1)   
                {  
                    printf("read error from controlling TTY, errno = %d
    ", errno);  
                }  
                exit(0);  
            }  
        return 0;  
    }  

    运行结果:

    huangcheng@ubuntu:~$ ./a.out
    parent: pid = 3569, ppid = 2135, pgrp = 3569, tpgrp = 3569
    child: pid = 3570, ppid = 3569, pgrp = 3569, tpgrp = 3569
    SIGHUP recvived, pid = 3570
    child: pid = 3570, ppid = 1, pgrp = 3569, tpgrp = 3569
    


  • 相关阅读:
    工厂模式之数据工厂
    面向过程的命令模式
    DLL共享主窗口的ADOCONNECTION
    插件框架
    人生哲理
    字符串函数大全
    汉化DBNavigator
    类继承复用之适配器模式
    Bootstraptagsinput标系统使用心得
    bootstrapdatepicker使用
  • 原文地址:https://www.cnblogs.com/hehehaha/p/6332470.html
Copyright © 2020-2023  润新知