Chinaunix首页 | 论坛 | 博客
  • 博客访问: 204984
  • 博文数量: 70
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 412
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-30 11:07
文章分类

全部博文(70)

文章存档

2014年(68)

2013年(2)

我的朋友

分类: LINUX

2014-02-21 15:35:33

原文网址:http://blog.sina.com.cn/s/blog_485c8cc50100eisn.html

前言:任何事情都一样,原理弄清楚了,所有的问题将变得不再神秘。

 

学计算机的人都知道,在任何同一时刻,计算机只能执行一条指令,而且都是顺序往下执行的(除非遇到跳转指令)。

Linux的进程启动都是根据启动脚本里的指令进行的,主要有两类:init 和bash. init 是所有脚本的最顶端,首先被执行,而bash一般是登陆shell 的时候才会被调用。

 

不同的文件系统具体的启动脚本文件名称是不一样的。以我使用的文件系统(yaffs)为例,/etc/init.d/rcS 作为init 的脚本,如果你想开机时进入自己的应用程序,则在rcS里面写入就可以。比如我想启动/usr/qtopia/chip  则在里面写入/usr/qtopia/chip –qws  就可以。

/etc/init.d/profile 作为bash 的脚本 ,在这个脚本里的指令 开机时不会被执行,但是你进入shell 状态时,就会被调用,一般来说bash 脚本多数用来存放环境变量,记住,每一次进入shell 都会调用一次bash 脚本。

 

来看看我分析一个例程,在/usr/qtopia 里有一个qt 程序,不采用自启动的方式,而是利用终端输入(进入终端就意味着进入shell)打开,这时候没问题,程序正常被打开,这说明里我的qt 库lib 的环境变量设置没问题。

但是当我采用自启动的方式,即在/etc/init/rcS 里加入/usr/qtopia/chip –qws 时却提示 error while loading share qtlib.so.4 ````````为什么呢?

原因是这样的:我的环境变量放在/etc/profile 而程序执行指令放在/etc/init.d/rcS ,这里就会出现一个问题,rcS 最先被执行 而profile 还没被执行,这样很明显找不到lib 了嘛,回头看终端输入启动,为什么就找到lib 呢 ?很简单,你打开终端时,bash 已经被调用。这样,执行的顺序变为首先执行/etc/profile 然后才执行你的指令。

 

 

注:ubuntu 系统的bash 脚本是 ~/.bashrc 或者 /etc/bashrc


阅读(911) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~