UNIX环境高级编程学习之第九章进程关系-创建孤儿进程

Linux/Unix C/C++ xiujie 199℃ 0评论 已收录

UNIX环境高级编程学习之第九章进程关系-创建孤儿进程

/*
File: OrphanProcess.c
Desc: 创建孤儿进程
	  父进程终止后,向原子进程发送挂断信号,又接着发送继续信号。
*/
#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 /n", getpid());
}
/* 打印进程ID、父进程ID、进程组ID、前台进程组ID */
static void pr_ids(char* name)
{
        printf("%s: pid = %d, ppid = %d, pgrp = %d, tpgrp = %d /n", 
                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/n");
                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/n", errno);
                }
                exit(0);
        }
        return 0;
}


喜欢 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址