shell 命令的執行 fork exec

2021-07-22 01:08:02 字數 1479 閱讀 7498

shell命令分為 內建命令 & 外部命令

內建命令(builtin command) 是shell解釋程式內建的,由shell直接執行,不需要派生新的程序。

常見的內建命令:

.(點命令)、bg、

cd、continue

、echo

、exec

、exit

、export、fg

、jobs

、pwd

、read

、return

、set

、shift

、test

、times

、trap

、umask

、unset

和wait

.

外部命令分為兩種: 二進位制** 或 shell指令碼。

shell執行外部命令時,會建立乙個新的程序來執行命令。預設shell將等待直到該程序結束。      

常見的外部命令:

grep more cat mkdir rmdir ls  sort  ftp  telnet  ssh   ps   等

linux能通過fork()呼叫,建立乙個新的程序,fork會建立原有程序的貯存的精確拷貝。

呼叫fork的程序是父程序,而由fork建立的程序是子程序。shell 外部命令時,父程序通過fork建立了乙個和它一模一樣的子程序。

對於外部二進位制命令(/bin 下的都是二進位制可執行檔案),shell 需要一種機制,把 子程序 轉換為 將要執行的命令。linux呼叫execve可以實現將子shell "變身為" 外部命令,execve允許乙個程序用其他外部命令的可執行**覆蓋自己。總的來說就是: shell 直譯器會呼叫fork 自身的乙個拷貝,然後呼叫 exec 系列函式來執行外部命令,這樣外部命令就取代了先前的子shell.

對於指令碼,shell直譯器會fork乙個子程序,子程序會檢查指令碼的第一行(#!/bin/sh ),找到用來執行指令碼的解釋程式,然後裝入這個解釋程式,由它解釋執行指令碼。解釋程式可能有很多種,各種shell(bash、korn shell、cshell)等等。  在此解釋程式是當前shell的子程序。如果這個直譯器與當前shell使用的是同一種shell,比如都是bash,他就是當前shell的子shell。指令碼中的命令都是在子shell中執行的,不會影響當前shell的環境。

使用fork函式得到的

程序上下文、程序堆疊、記憶體資訊、開啟的檔案描述符、訊號控制設定、程序優先順序、程序組號、當前工作目錄、根目錄、資源限制、控制終端等。

shell執行命令的方式

想寫這篇文章還得從執行乙個指令碼說起 nohup sh run.sh 看到這樣執行指令碼的方式,剛開始有點不知所措,經過一番理解之後才發現這樣的執行方式考慮的真的很周全 用sh執行指令碼好處是不管指令碼有沒有執行許可權都可以被執行 不管相對路徑.run.sh還是絕對路徑執行 home sas cmn...

python的執行shell命令

os.system cat proc cpuinfo 返回的是執行的結果,1或者是其他 output os.popen cat proc cpuinfo print output.read 通過 os.popen 返回的是 file read 的物件,對其進行讀取 read 的操作可以看到執行的輸出...

Android執行shell命令

android執行shell命令 一 方法 執行乙個shell命令,並返回字串值 param cmd 命令名稱 引數組成的陣列 例如 param workdirectory 命令執行路徑 例如 system bin return 執行結果組成的字串 throws ioexception public...