免费注册 查看新帖 |

Chinaunix

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

关于nohup命令 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-15 22:12 |只看该作者 |倒序浏览
http://www.chinaunix.net/jh/7/228500.html 中这样说: 当终端退出后,由该终端启动的后台程序自动退出。要想终端退出后程序不停止运行,则要用nohup命令启动后台程序。

我昨天压缩一个文件,后台执行,没有用nohup。然后终端就退出了。今天早上查看这个文件已经压缩完了,6.4G,可见命令并不没有退出。


文章有错?

论坛徽章:
0
2 [报告]
发表于 2008-06-15 22:28 |只看该作者
用screen,,,

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
3 [报告]
发表于 2008-06-16 08:23 |只看该作者
可能
1.你的压缩进程不是该shell的子进程
2.你的压缩进程自行处理SIGHUP而不是用缺省的退出

论坛徽章:
0
4 [报告]
发表于 2008-06-16 08:54 |只看该作者
原帖由 waker 于 2008-6-16 08:23 发表
可能
1.你的压缩进程不是该shell的子进程
2.你的压缩进程自行处理SIGHUP而不是用缺省的退出


第一点有可能吗??

第二点应该有可能

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
5 [报告]
发表于 2008-06-16 09:08 |只看该作者

回复 #4 flowingtree 的帖子

在脚本里使用后台进程就是典型例子啊

  1. [waker@proxy ~]$ cat >orphan.sh <<\EOF
  2. > #! /bin/bash
  3. > sleep 120 &
  4. > EOF
  5. [waker@proxy ~]$ chmod +x orphan.sh
  6. [waker@proxy ~]$ ./orphan.sh
  7. [waker@proxy ~]$ ps -ef|grep '[s]leep'
  8. waker     6995     1  0 08:16 pts/3    00:00:00 sleep 120
复制代码


sleep的PPID是1

论坛徽章:
0
6 [报告]
发表于 2008-06-16 10:13 |只看该作者
取决于用的shell版本是什么?如果用的是php就不行.....

论坛徽章:
0
7 [报告]
发表于 2008-06-16 10:22 |只看该作者
比较怪异的问题

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
8 [报告]
发表于 2008-06-16 10:48 |只看该作者
1.当交互bash退出的时候,比如exit或logout,它会发送SIGHUP到它的所有作业,作业下的所有子进程都会收到SIGHUP。

2.当终端挂断的时候,终端驱动会发送SIGHUP到它的控制进程,通常我们登录后控制进程就是bash,它收到SIGHUP,然后退出,退出的过程参1

3.显然不想让一个进程被bash发送的SIGHUP中止通常用三种方法:
  a.自己处理SIGHUP
  b.忽略SIGHUP(用nohup命令或disown -h)
  c.脱离交互bash的作业(比如用disown,在脚本中发起后台命令,在nestedsubshell中发起后台命令)
不知道这样是不是清楚

论坛徽章:
0
9 [报告]
发表于 2008-06-16 12:06 |只看该作者
相当的清楚

论坛徽章:
0
10 [报告]
发表于 2008-06-17 11:30 |只看该作者
之前有讨论过这个问题的,IBM网站上有一篇文章,可以搜索一下!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP