1. 程式人生 > >如何運行linux程序

如何運行linux程序

linux程序 執行文件 運行程序 source 解釋器

導讀搞懂linux程序如何運行是一件重要的事情,這是為我們進一步發展打下了堅實基礎的一步。本文將通過實例來詳細地講解如何運行linux程序。希望對於大家理解有幫助。

首先,我們從一個十分簡單的例子test.sh開始吧:

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

這是一個十分簡單的程序,但是運行結果可能會讓你吃驚哦!

技術分享

這個時候,我們發現程序運行之後,並沒有改變當前目錄。(黑人問號???)

別著急,我們先了解一下linux程序如何運行。

linux程序三種執行方法

運行linux程序有三種方法,分別是:

1、使文件具有可執行權限,直接運行文件。

chmod 命令用來修改文件的權限。+x是使文件擁有可執行的權限。就如上面我們運行程序一樣。但是我們看到的結果與我們想象當中有一定的出入。

2、直接調用命令解釋器執行程序。

如下圖所示:

技術分享

由於我們的解釋器是/bin/sh,所以,用sh命令解釋器來執行程序。

我們也看到當前的工作路徑沒有發生變化。(黑人問號???)

3、使用source執行文件。

技術分享

沒錯,這裏我們發現當前的工作路徑發生了變化,(黑人問號???)但是究竟為什麽呢?讓我們帶著三個黑人問號詳細了解一下linux程序究竟怎麽執行。

linux程序執行的過程

當命令行shell執行程序時,首先判斷是否該程序具有可執行權限。如果沒有可執行權限,就會提示:Permission denied(權限不夠),如下圖所示:

技術分享

在第一種方法中,我們直接執行文件,就先加上了可執行權限。

當命令行接收到我們的執行命令,並且判斷具有可執行權限後,則調用Linux內核命令新建一個進程,在新建的進程中調用指定的命令。但是我們的test.sh不是編譯型的文件,所以linux內核不知道如何執行,然後交給shell,shell就知道這是一個腳本,那麽就啟動一個新的shell進程來進行執行。但是linux系統有很多shell,如圖:

技術分享

我們程序第一行看到是#!/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腳本時不會創建子進程,而是在父進程中直接執行。至此黑人問號消失,繼續加油寫代碼吧。

原文地址:http://www.linuxprobe.com/run-linux-program.html

本文出自 “小華的博客” 博客,請務必保留此出處http://coderhsf.blog.51cto.com/12629645/1923542

如何運行linux程序