Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15531020
  • 博文数量: 2005
  • 博客积分: 11986
  • 博客等级: 上将
  • 技术积分: 22535
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-17 13:56
文章分类

全部博文(2005)

文章存档

2014年(2)

2013年(2)

2012年(16)

2011年(66)

2010年(368)

2009年(743)

2008年(491)

2007年(317)

分类: 嵌入式

2009-08-08 13:57:31

因为/etc/init.d/rcS脚本在/etc/inittab中以最高优先级第一个被init程序解析并使用daemon方式启动,
::sysinit:/etc/init.d/rcS
所以这样rcS脚本就作为一个独立的程序存在于进程空间了,
比如我们希望在rcS脚本中执行一个独立的程序,那么我们应该使用直接执行命令方法,而不是使用exec,
因为exec调用内核将直接置换用户空间rcS程序为exec执行的程序,所以这样exec语句之后的rcS剩余的所有程序都将因为
用户空间程序rcS被置换而永远消失,也不是使用&后台处理方式,[luther.gliethttp]
因为&表示到后台执行这组命令,没有以daemon方式运行,但是很可能后台那组命令还没有执行完的时候,
rcS脚本就已经退出了,所以这样以rcS程序为parent的所有&后台运行的程序都将被强制退出,[luther.gliethttp]
所以正确的做法是直接执行需要的程序,比如直接输入/sbin/telnetd,
当然如果在rcS脚本中启动没有返回的程序,那么可以加入nohup,将该程序以daemon方式脱离与rcS的关系,这样即便rcS脚本
程序执行完毕退出了,nohup的程序也将继续运行下去,希望这段理解对后来接触busybox的人有启发[luther.gliethttp]
下面是2个例子,应用在我的运信2.6.30.4内核的ep9312开发板上:[luther.gliethttp]
nohup /bin/sh -c "/sbin/udhcpc >/dev/null 2>&1" >/dev/null 2>&1 &
nohup /bin/sh -c "sleep 4 ;/bin/mount -o nolock -t nfs 192.168.1.101:/vobs/nfs /nfs" >/dev/null 2>&1 &
阅读(8262) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~