/*
创建孤儿进程
父进程终止后,向子进程发送挂断信号,又接着发送继续信号。
*/
#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;
}

运行结果:

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

最新文章

  1. 23种设计模式--代理模式-Proxy
  2. 烂泥:wiki系统confluence5.6.6安装、中文、破解及迁移
  3. java编程实现日历
  4. Sphinx+MySQL5.1x+SphinxSE+mmseg
  5. LRU
  6. LOVE代码收集
  7. C++中类的大小计算方法总结《网络+总结》
  8. win7下wamp扩展memcache
  9. BotVS开发基础—2.3 下市价单 交易
  10. Struts2之Action的实现
  11. jQuery动画使用总结
  12. OpenCV函数学习:cvRound,cvFloor,cvCeil
  13. 2.Django路由规则
  14. 【分布式缓存系列】Redis实现分布式锁的正确姿势
  15. 关于使用easyui为前端框架,加载表格数据较多时在火狐浏览器会出现表格片段不停闪烁问题的兼容问题解决。
  16. S5PV210 串口实验(中断方式)
  17. csp20140904最优配餐_Solution
  18. 性能优化系列八:MYSQL的配置优化
  19. 记录结果再利用的&quot;动态规划&quot;之背包问题
  20. ios调用系统界面显示英文

热门文章

  1. Python使用wmi获取Windows相关信息
  2. Hash算法入门指南(聊点不一样的算法人生)
  3. 本地缓存,Redis缓存,数据库DB查询(结合代码分析)
  4. tf.nn.embedding_lookup TensorFlow embedding_lookup 函数最简单实例
  5. USB_ESD处理
  6. Springboot整合log4j2【详细步骤】
  7. Java自定义注解的实现
  8. 360搜索引擎so自动收录php改写方案——适合phpcms等cms
  9. 安装redis 执行make命令时报错解决方法
  10. Windows下的DOM操作