免费注册 查看新帖 |

Chinaunix

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

看到syetem的实现,有一个问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-22 16:39 |只看该作者 |倒序浏览
《高级编程》里面,有一个system的实现

里面有这么一句
execl("/bin/sh","sh","-c",command,(char *)0)

假设调用此函数的的程序名为a.out

进程结构应该是这样的:a.out-->sh-->command

我想问一下,sh为什么会结束呢,在command结束以后,返回给sh,但sh不会结束啊,他怎么返回到a.out呢
是不是因为“-c”的原因

论坛徽章:
1
黑曼巴
日期:2020-02-27 22:54:26
2 [报告]
发表于 2009-12-22 16:51 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
3 [报告]
发表于 2009-12-22 17:17 |只看该作者
sh也是个程序

论坛徽章:
0
4 [报告]
发表于 2009-12-22 18:13 |只看该作者
原帖由 c/unix 于 2009-12-22 16:51 发表
sh凭什么不会结束,他也只是一个程序


总要有个进程去杀掉他,或者他自己调用exit吧,是什么保证的呢

论坛徽章:
0
5 [报告]
发表于 2009-12-22 18:16 |只看该作者
sh是可以退出的,UNIX是多进程环境。

论坛徽章:
0
6 [报告]
发表于 2009-12-22 19:32 |只看该作者
原帖由 prolj 于 2009-12-22 18:16 发表
sh是可以退出的,UNIX是多进程环境。

谁把他杀掉呢,难道command结束之后,sh会自动结束?

论坛徽章:
154
2022北京冬奥会纪念版徽章
日期:2015-08-07 17:10:5720周年集字徽章-年
日期:2022-10-26 16:44:2015-16赛季CBA联赛之深圳
日期:2022-11-02 14:02:4515-16赛季CBA联赛之八一
日期:2022-11-28 12:07:4820周年集字徽章-20	
日期:2023-07-19 08:49:4515-16赛季CBA联赛之八一
日期:2023-11-04 19:23:5115-16赛季CBA联赛之广夏
日期:2023-12-13 18:09:34
7 [报告]
发表于 2009-12-22 19:38 |只看该作者

回复 #6 xdshting 的帖子

默认情况下的进程模型的确如此,但也可以加选项让父进程结束后子进程不被XX,

遇到这种可能,具体应该根据相关的文档做测试

论坛徽章:
0
8 [报告]
发表于 2009-12-22 19:40 |只看该作者
sh可以退出

论坛徽章:
0
9 [报告]
发表于 2009-12-22 22:31 |只看该作者

回复 #1 xdshting 的帖子

不怎么明白楼住的意思,ecec族一般紧随 着fork()。 execl("/bin/sh","sh","-c",command,(char *)0) 这个好像应该产生一个子进程吧? 子进程结束后返回父进程阿~ 所以就应该返回到那个a.out阿~

论坛徽章:
0
10 [报告]
发表于 2009-12-22 22:37 |只看该作者

回复 #6 xdshting 的帖子

你看到脚本开头的 !#/bin/sh 了吧?
你在AIX里面用过bash么?
我没心情解释这个。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP