linux中进程组织结构为session包含一个前台进程组及一个或多个后台进程组,一个进程组包含多个进程。

一个session可能会有一个session首进程,而一个session首进程可能会有一个控制终端。一个进程组可能会有一个进程组首进程。( 这儿是可能会有,在一定情况之下是没有的)

进程组首进程的PID与该进程组ID相等。

与终端交互的进程是前台进程,否则便是后台进程。

SIGHUP会在以下3种情况下被发送给相应的进程:

1、终端关闭时,该信号被发送到首进程以及作为job提交的进程(即用 & 符号提交的进程)

2、session首进程退出时,该信号被发送到该session中的前台进程组中的每一个进程

3、若父进程退出导致进程组成为孤儿进程组,且该进程组中有进程处于停止状态(收到SIGSTOP或SIGTSTP信号),该信号会被发送到该进程组中的每一个进程。

系统对信号的默认处理是终止收到该信号的进程。

所以若程序中没有捕捉该信号,当收到该信号时,进程就会退出。

下面观察几种因终端关闭导致进程退出的情况,在这儿进程退出是因为收到了SIGHUP信号。

login shell是session首进程。

首先写一个测试程序,代码如下:

#include

#include

char **args;

void exithandle(int sig)

{

printf("%s : sighupreceived\n",args[1]);

}

int main(int argc,char **argv)

{

args=argv;

signal(SIGHUP,exithandle);

pause();

return 0;

}

程序中捕捉SIGHUP信号后打印一条信息,pause()使程序暂停。

编译后的执行文件为sigtest

1、命令: sigtest front > tt.txt

操作: 关闭终端

结果: tt文件的内容为front: sighup received

原因:

sigtest是前台进程,终端关闭后,根据上面提到的第1种情况, loginshell作为session首进程,会收到SIGHUP信号然后退出,

根据第2种情况,sigtest作为前台进程,会收到login shell发出的SIGHUP信号。

2、命令:

sigtest back > tt.txt &

操作:

关闭终端

结果:

tt文件的内容为back: sighup received

原因:

sigtest是提交的job,根据上面提到的第1种情况,sigtest会收到SIGHUP信号

3、写一个shell,内容为

sigtest &

执行该shell

操作: 关闭终端

结果: 执行ps -ef | grep sigtest命令,会看到该进程还在,tt文件为空

原因:

执行该shell时,sigtest作为job提交,然后该shell退出,致使sigtest变成了孤儿进程,不再是当前session的job,

因此sigtest即不是session首进程也不是job,不会收到SIGHUP。

同时孤儿进程属于后台进程,因此loginshell退出后不会发送SIGHUP给sigtest,因为它只将该信号发送给前台进程。

第3条说过若进程组变成孤儿进程组的时候,若有进程处于停止状态,也会收到SIGHUP信号,但sigtest没有处于停止状态,所以不会收到SIGHUP信号。

4、nohup sigtest > tt

操作:

关闭终端

结果: tt文件为空

原因:nohup可以防止进程收到SIGHUP信号

至此,我们就清楚了何种情况下终端关闭后进程会退出,何种情况下不会退出。

要想终端关闭后进程不退出有以下几种方法,均为通过shell的方式:

1、 编写shell,内容如下

trap "" SIGHUP #该句的作用是屏蔽SIGHUP信号,trap可以屏蔽很多信号

sigtest

2、nohup sigtest可以直接在命令行执行,

若想做完该操作后继续别的操作,可以执行

nohup sigtest &

3、 编写shell,内容如下

sigtest &

总结:

可以采用任何将进程变为孤儿进程的方式,让程序常驻后台运行,包括fork后父进程马上退出,这是C语言中实现daemon程序的常用技巧。

java语言写常驻服务_让程序常驻后台运行的原理和方法相关推荐

  1. Linux——让程序在后台运行(四种方法+使用推荐)

    目录 一.第一种方法(加"&"符号) 二.第二种方法(nohup命令)  三.第三种方法(screen命令)   四.第四种方法(systemctl命令)   五.总结 六 ...

  2. 让程序常驻后台运行的原理和方法

    为什么80%的码农都做不了架构师?>>>    linux中进程组织结构为session包含一个前台进程组及一个或多个后台进程组,一个进程组包含多个进程. 一个session可能会有 ...

  3. 关于ios程序的后台运行

    文一  我从苹果文档中得知,一般的应用在进入后台的时候可以获取一定时间来运行相关任务,也就是说可以在后台运行一小段时间.  还有三种类型的可以运行在后以,  1.音乐  2.location  3.v ...

  4. 第九届蓝桥杯省赛JAVA语言 C组题解_题7 缩位求和

    JAVA语言 C组题解_题7 缩位求和 题目 解题思路 题目 标题:缩位求和 在电子计算机普及以前,人们经常用一个粗略的方法来验算四则运算是否正确. 比如:248 * 15 = 3720 把乘数和被乘 ...

  5. Java语言程序设计实验指导_《java语言程序设计》上机实验指导手册(4).doc

    <java语言程序设计>上机实验指导手册(4).doc 1JAVA语言程序设计上机实验指导手册(4)2实验四JAVA面向对象编程1[目的]①通过编程和上机实验理解JAVA语言是如何体现面向 ...

  6. java代码编写的文本特征提取_Test1 java语言写的特征提取源代码,有搞文字识别的可以下载一看,简单易学 Develop 274万源代码下载- www.pudn.com...

    文件名称: Test1下载  收藏√  [ 5  4  3  2  1 ] 开发工具: Java 文件大小: 35 KB 上传时间: 2015-03-02 下载次数: 46 提 供 者: 常杰 详细说 ...

  7. c语言中怎么暂停一个一个游戏,求助:最近在linux下用c语言写了一个贪吃蛇程序,有几个问题,第一:贪吃蛇怎么实现暂停,第二:有时候同时输入上下左右中的两个键就会直接游戏结束...

    求助:最近在linux下用c语言写了一个贪吃蛇程序,有几个问题,第一:贪吃蛇怎么实现暂停,第二:有时候同时输入上下左右中的两个键就会直接游戏结束 /* 以下是主要的逻辑代码,还有些.c和.h就没发了 ...

  8. java基本单位,Java语言中的【】是程序的基本单位。

    Java语言中的[]是程序的基本单位. 更多相关问题 机坪内设有的专门车道区域内,勤务车辆行使速度不应超过:(). 在使用电阻制动时,当电阻制动投入前列车管的压力不管是500KPa还是600KPa,均 ...

  9. 安卓是用java语言写的吗_android开发是用java语言吗?

    android开发的主流语言是java语言,但也可以使用其他语言,例可以通过Android NDK使用C/C++作为编程语言来开发应用程序,也可使用SL4A来使用其他各种脚本语言进行编程. Andro ...

最新文章

  1. R语言广义加性模型GAMs:可视化每个变量的样条函数、样条函数与变量与目标变量之间的平滑曲线比较、并进行多变量的归一化比较、测试广义线性加性模型GAMs在测试集上的表现(防止过拟合)
  2. Java8的十大新特性
  3. C++ STL : 模拟实现STL中的list类
  4. 导航系统中里程计研究综述
  5. 计算机组成知识教案,计算机系统的基本组成 教案_
  6. Qos限速、流量监管、流量整形原理和实验(华为设备)
  7. 电脑太卡之NT kernel System
  8. TensorFlow练习13: 制作一个简单的聊天机器人
  9. MySQL语句练习---由简入繁
  10. Origin复制到PPT中无法打开
  11. Matplotlib填图
  12. 加州大学圣克鲁兹分校计算机科学专业,加州大学圣克鲁兹分校排名
  13. 设定PCB的区域(AD18)
  14. 多模态Prompt Tuning,你到底行不行?
  15. 京东第二轮裁员来袭,套路满满:假装劝退,劝员工找工作,贬低工作能力,忽悠员工不走仲裁!...
  16. 激活MDI中已经打开过的文件
  17. Saiku设置展示table数据不隐藏空的行数据信息(二十六)
  18. 全方位解读Web3域名:DID基石、NFT新增长点
  19. 2022年计算机二级考试题库软件+模拟考试系统下载
  20. Oracle 表空间清理

热门文章

  1. Android 调用系统的ContentProvider
  2. python爬取豆瓣图片
  3. 美食推荐系统 (协同过滤 + 内容过滤(余弦函数))(SSM,MySQL)
  4. 【RX解码BT656输出】XS9922A 四合一同轴高清解码芯片方案 国产 交期无忧 对标TP9930
  5. 图像识别技术解析:手写数字识别(一)
  6. 首次安装“超市通”、“金管家”等POS软件注意事项
  7. 站长爆料:大量黑产利用高权重网站霸屏引流
  8. 校园网AP隔离情况下用户互通的几种方法总结
  9. 二维码简介_二维码基本概念_二维码基本原理
  10. 51单片机汇编学习例程(10)——DAC0832篇