阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

如何运行linux程序

30次阅读
没有评论

共计 1265 个字符,预计需要花费 4 分钟才能阅读完成。

导读 搞懂 linux 程序如何运行是一件重要的事情,这是为我们进一步发展打下了坚实基础的一步。本文将通过实例来详细地讲解如何运行 linux 程序。希望对于大家理解有帮助。

首先,我们从一个十分简单的例子 test.sh 开始吧:

#!/bin/sh
#this is a test.
cd /tmp
echo "hello,this is a test"

这是一个十分简单的程序,但是运行结果可能会让你吃惊哦!

如何运行 linux 程序

这个时候,我们发现程序运行之后,并没有改变当前目录。(黑人问号???)

别着急,我们先了解一下 linux 程序如何运行。

linux 程序三种执行方法

运行 linux 程序有三种方法,分别是:

1、使文件具有可执行权限,直接运行文件。

chmod 命令用来修改文件的权限。+x是使文件拥有可执行的权限。就如上面我们运行程序一样。但是我们看到的结果与我们想象当中有一定的出入。

2、直接调用命令解释器执行程序。

如下图所示:

如何运行 linux 程序

由于我们的解释器是 /bin/sh,所以,用 sh 命令解释器来执行程序。

我们也看到当前的工作路径没有发生变化。(黑人问号???)

3、使用 source 执行文件。

如何运行 linux 程序

没错,这里我们发现当前的工作路径发生了变化,(黑人问号???)但是究竟为什么呢?让我们带着三个黑人问号详细了解一下 linux 程序究竟怎么执行。

linux 程序执行的过程

当命令行 shell 执行程序时,首先判断是否该程序具有可执行权限。如果没有可执行权限,就会提示:Permission denied(权限不够),如下图所示:

如何运行 linux 程序

在第一种方法中,我们直接执行文件,就先加上了可执行权限。

当命令行接收到我们的执行命令,并且判断具有可执行权限后,则调用 Linux 内核命令新建一个进程,在新建的进程中调用指定的命令。但是我们的 test.sh 不是编译型的文件,所以 linux 内核不知道如何执行,然后交给 shell,shell 就知道这是一个脚本,那么就启动一个新的 shell 进程来进行执行。但是 linux 系统有很多 shell,如图:

如何运行 linux 程序

我们程序第一行看到是 #!/bin/sh,这时,命令行就启用一个新的 bash 进程来执行程序。

程序执行差异

在我们运行 shell 程序的三种方法中,前两种方法的执行过程如下:

(1)父进程接收到命令,然后发现不是内建命令,于是创建了一个和自己一样的 s h e l l 进程,来执行这个外部命令

(2)这个 s h e l l 子进程用 /bin/sh 取代自己,sh 进程设置自己的运行环境变量,其中包括了 $PWD 变量。

(3)sh 进程依次执行内建命令 cdecho。在此过程中,sh 进程(子进程)的环境变量被 cd 命令改变。

(4)子进程执行完毕,就消亡了,一直在等待的父进程醒来,继续接受命令。

所以我们明白了前两种方法执行结果跟我们预期不一样的原因,父进程的当前目录(环境变量)无法被子进程改变。

但是,使用 source 执行是 shell 脚本时不会创建子进程,而是在父进程中直接执行。至此黑人问号消失,继续加油写代码吧。

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-24发表,共计1265字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中