免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5246 | 回复: 8
打印 上一主题 下一主题

[Linux] 断开ssh,后台进程没有关闭? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-05-28 21:14 |只看该作者 |倒序浏览
本帖最后由 viki345 于 2014-05-28 21:15 编辑

    平常做事的时候,当ssh到服务器执行一个服务程序的时候,要setsid。因为你即使将程序放到后台执行,终端关闭,就会给所有的进程发送sighup信号。
**************
    但是,今天我看《apue 2》p237,说“先发送sighup信号给控制首进程,然后控制首进程将sighup发送给前台进程组中的所有进程
??????????
***********************
然后,我就写了端代码试了下,果然如此。
当我把ssh断开的时候,后台的进程依然存在。
  1.   1 #include <stdio.h>
  2.   2 #include <signal.h>
  3.   3 #include <stdlib.h>
  4.   4 void sighup(int signo)
  5.   5 {
  6.   6         FILE *fp;
  7.   7         fp=fopen("/tmp/test","w");
  8.   8         if(signo==SIGHUP)
  9.   9         fprintf(fp,"%d get sighup",getpid());
  10. 10         fclose(fp);
  11. 11         exit(0);
  12. 12 }
  13. 13 int main()
  14. 14 {
  15. 15 //      signal(SIGHUP,sighup);
  16. 16         int pid;
  17. 17         pid=fork();
  18. 18         if(pid==0)
  19. 19         {
  20. 20                 
  21. 21                 exit(0);
  22. 22         }
  23. 23         else   
  24. 24                 if(pid > 0)
  25. 25                 {      
  26. 26                         while(1)
  27. 27                         {      
  28. 28                                 sleep(1);
  29. 29                         }
  30. 30                 }
  31. 31 }
复制代码
1.当不捕获sighup的时候,将程序放到后台,断开ssh,程序依然存在。
我用的是debian 6.0
内核是
  1. 2.6.32-5-686
复制代码

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
2 [报告]
发表于 2014-05-28 22:32 |只看该作者
写反了吧?

  1. if(pid==0)
  2. {
  3.         // 这里是子进程
  4.         exit(0);
  5. }
  6. else
  7. {
  8.         // 这里是父进程
  9.         // ...
  10. }
复制代码

论坛徽章:
0
3 [报告]
发表于 2014-05-28 22:50 |只看该作者
写的子进程是准备做其他测试的,在这里先忽略。
*****
关键是,我执行./test &
然后断开securecrt。进到虚拟机里看这个进程还是存在的。
*****
我又试了下其他进程 nc -l -p 50000&
断开securecrt
看虚拟机 ps -axj |grep nc
谢特,nc还在
****

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
4 [报告]
发表于 2014-05-29 07:32 |只看该作者
  1. shopt huponexit
复制代码
这个输出是off?

论坛徽章:
0
5 [报告]
发表于 2014-05-29 18:01 |只看该作者
果然是off
以前还真不知道有这个设置
*************

  1. shopt |grep huponexit
复制代码
打开这个设置,后台进程就也会退出了。
  1. shopt -s huponexit
复制代码
*****************
那是否可以通过关闭这个选项,来避免断开ssh导致后台进程退出???

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
6 [报告]
发表于 2014-05-29 23:17 |只看该作者
回复 5# viki345

其实…………不能…………

SSH进程退出以后,pty也被关闭了,如果没有捕获信号,读写stdin/out/err会触发SIGPIPE,缺省的动作就是结束进程。

如果你这么纠结,推荐你用screen或者tmux

论坛徽章:
0
7 [报告]
发表于 2014-05-30 13:07 |只看该作者
回复 6# windoze
thx


   

论坛徽章:
0
8 [报告]
发表于 2014-06-04 15:04 |只看该作者
我执行./test &

这个 & 已经指定把进程挂到后台了,断开终端是不会影响到这个进程的。

论坛徽章:
0
9 [报告]
发表于 2014-06-11 19:38 |只看该作者
回复 8# ddm95
虽然是放到了后台,但是还是属于一个会话。所以应该有影响的。
打开上面说的那个设置 hupeonexit 就会有影响的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP