免费注册 查看新帖 |

Chinaunix

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

一个进程挂起的问题,求理论解释 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-08-26 20:03 |只看该作者 |倒序浏览
有这样一条命令:
ping 163.com >> ping.log 2>&1 &
直接执行后 ctrl+F4窗口,会发现进程被干掉。这主要是ctrl+F4窗口时发送一个SIGHUP信号
会终止在这个会话下所有有终端输出的任务

如果我在外面包一层
#ping.sh
ping 163.com >> ping.log 2>&1 &

然后终端执行ping.sh,无论怎样关都没问题。

在这个问题的基础上出现了一个衍生问题
通过脚本执行时,为什么内部的那条命令会独立存在。

论坛徽章:
0
2 [报告]
发表于 2010-08-26 20:13 |只看该作者
没明白,,,,,期待讲解。。。

论坛徽章:
0
3 [报告]
发表于 2010-08-26 20:28 |只看该作者
我菜鸟,讲下我的想法:
在命令行执行命令,命令是在当前shell执行的,关闭了当前shell,那么命令也就结束了
在脚本中执行命令,命令是在subshell中执行的,关闭了当前shell,subshell不受影响,那么脚本中的命令继续执行

论坛徽章:
0
4 [报告]
发表于 2010-08-27 00:00 |只看该作者
两种情况下的父进程不一样。
一种是当前shell, 一种是init

论坛徽章:
0
5 [报告]
发表于 2010-08-27 09:41 |只看该作者
回复 3# bbgg1983


    搭车问两个问题

1.nohup 可以解决第一个问题吗?我试了,有问题,为什么

$ nohub ping 192.168.58.202 > ping.log 2>&1 &
[1] 8729
$ ps -aux|grep ping
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.3/FAQ
upload    8731  0.0  0.0  4372  660 pts/2    S+   09:37   0:00 grep ping
[1]+  Exit 127                nohub ping 192.168.58.202 >ping.log 2>&1



2.这样是不是那个ping的shell就成了孤儿进程?
还有 已知进程id,怎么查询父进程?

论坛徽章:
0
6 [报告]
发表于 2010-08-27 09:55 |只看该作者
1.nohup可以解决第一个问题,不过你运行命令的时候打错了,弄成nohub了
2.不会是孤儿进程,将会由init接管。
ps -ef就可以看父进程pid,第二列是进程pid,第三列是父进程pid

论坛徽章:
0
7 [报告]
发表于 2010-08-27 10:18 |只看该作者
俺来凑个热闹

在shell下直接写命令调用到后台,它的父进程是此shell,一旦此shell进程关闭,那么子进程也随之关闭了

在脚本中写的命令,在shell中执行脚本的时候会开启一个子shell去执行脚本中的命令,脚本执行完毕子shell也就退出了,子shell退出的时候会把它自己的子进程交给系统init去管理,也就是init成了后台命令的父进程,从而在后台正常执行

不知道这样说是否清晰

论坛徽章:
0
8 [报告]
发表于 2010-08-27 11:09 |只看该作者
回复 6# bbgg1983


    谢谢咯,这下清楚了。
我再去试试

论坛徽章:
0
9 [报告]
发表于 2010-08-27 11:30 |只看该作者
回复 7# ddgfff


    伙计你说的真对啊


问题延伸一下

如果子shell没有结束,那么ping的那个后台进程的父进程还是子shell

如果用 ctrl-c,那么子shell结束,ping的那个后台进程也被结束
如果是在另一个console里把子shell用 kill -9结束,那么ping的后台进程会交给init。

我百度了,ctrl-c和相当于 kill -2 ,发的信号不同

哥你给解释一下 kill的signal之间的差异呗。或者给个link也可以

论坛徽章:
0
10 [报告]
发表于 2010-08-27 11:35 |只看该作者
回复 9# jiwang1980


    <ctrl>-c发送的是SIGINT信号。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP