因为/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) |