如何運行linux程序

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

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

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

如何運行linux程序如何運行linux程序

這個時候,咱們發現程序運行以後,並無改變當前目錄。(黑人問號???)shell

彆着急,咱們先了解一下linux程序如何運行。bash

linux程序三種執行方法this

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

一、使文件具備可執行權限,直接運行文件。htm

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

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

以下圖所示:io

如何運行linux程序如何運行linux程序

因爲咱們的解釋器是/bin/sh,因此,用sh命令解釋器來執行程序。

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

三、使用source執行文件。

如何運行linux程序如何運行linux程序

沒錯,這裏咱們發現當前的工做路徑發生了變化,(黑人問號???)可是究竟爲何呢?讓咱們帶着三個黑人問號詳細瞭解一下linux程序究竟怎麼執行。

linux程序執行的過程

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

如何運行linux程序如何運行linux程序

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

當命令行接收到咱們的執行命令,而且判斷具備可執行權限後,則調用Linux內核命令新建一個進程,在新建的進程中調用指定的命令。可是咱們的test.sh不是編譯型的文件,因此linux內核不知道如何執行,而後交給shell,shell就知道這是一個腳本,那麼就啓動一個新的shell進程來進行執行。可是linux系統有不少shell,如圖:

如何運行linux程序如何運行linux程序

咱們程序第一行看到是#!/bin/sh,這時,命令行就啓用一個新的bash進程來執行程序。

程序執行差別

在咱們運行shell程序的三種方法中,前兩種方法的執行過程以下:

(1)父進程接收到命令,而後發現不是內建命令,因而建立了一個和本身同樣的s h e l l進程,來執行這個外部命令

(2)這個s h e l l子進程用/bin/sh取代本身,sh進程設置本身的運行環境變量,其中包括了$PWD變量。

(3)sh進程依次執行內建命令cd和echo。在此過程當中,sh進程(子進程)的環境變量被cd命令改變。

(4)子進程執行完畢,就消亡了,一直在等待的父進程醒來,繼續接受命令。

因此咱們明白了前兩種方法執行結果跟咱們預期不同的緣由,父進程的當前目錄(環境變量)沒法被子進程改變。

可是,使用source執行是shell腳本時不會建立子進程,而是在父進程中直接執行。至此黑人問號消失,繼續加油寫代碼吧。

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

相關文章
相關標籤/搜索