shell

  • shell等待用戶輸入。
  • 用戶輸入一串命令,這些內(nèi)容會回顯在等待輸入處。按下回車后,回車鍵入的字符'\n'被解釋為換行,并激活阻塞shell的read系統(tǒng)調(diào)用。
  • shell程序解析用戶輸入,把用戶鍵入的文本行以空格分隔,每一串字符放在一個字符數(shù)組中,并一個指向字符數(shù)組的數(shù)組,將每個字符串數(shù)組的首地址保存進來。
    注:如果這些數(shù)據(jù)作為shell某個函數(shù)的局部數(shù)據(jù),那么會保存在用戶棧中。
  • 通過

如果shell判斷用戶執(zhí)行一個前臺作業(yè),那么shell會調(diào)用fork函數(shù)創(chuàng)建一個子進程,并在子進程中調(diào)用execve函數(shù),加載可以執(zhí)行文件。
第一個參數(shù)就是shell解析用戶輸入時的第一個字符數(shù)組,即用戶想要運行程序名字。
execve通過第一個參數(shù)來在調(diào)用進程中加載這個程序,失敗返回-1,成功不返回。
execve第二個參數(shù)是一個存放字符指針的數(shù)組,正好對應了shell解析的結(jié)果。
當shell進程中的fork執(zhí)行后,系統(tǒng)中創(chuàng)建了一個在當前時刻和shell一模一樣的進程,當fork在這個子進程中返回后,會將從shell中解析的結(jié)果作為參數(shù)傳遞給execve(用戶棧為shell進程的副本,自然有shell中的各種變量)。
而父進程,即shell,由于是前臺作業(yè),所以會等待子進程結(jié)束。
execve陷入內(nèi)核后,內(nèi)核使用了某種方法將execve的參數(shù)暫時保存下來,然后調(diào)用加載器,根據(jù)所要運行的程序的程序頭部表映射新的用戶地址空間,此時用戶堆棧段為空,完成后跳轉(zhuǎn)到程序入口點_start。
_start調(diào)用系統(tǒng)啟動函數(shù)__libc_start_main。
此時用戶棧中有了數(shù)據(jù):
然后調(diào)用main函數(shù)。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 姓名:袁永輝 學號:17101223423 轉(zhuǎn)載自:http://mp.weixin.qq.com/s/85...
    AliY520閱讀 1,568評論 0 0
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,723評論 0 5
  • 搭配《linux就該這樣學》第四章內(nèi)容 1.shell歷史 Shell的作用是解釋執(zhí)行用戶的命令,用戶輸入一條命令...
    木魚_cc閱讀 925評論 0 10
  • 函數(shù)的基本含義函數(shù)的定義和使用數(shù)組字符串處理特殊的處理變量用法 一、函數(shù)基本含義: 函數(shù):多條Shell命令組成的...
    哈嘍別樣閱讀 317評論 0 1
  • Shell 快速指南 概述 什么是 shell Shell 是一個用 C 語言編寫的程序,它是用戶使用 Linux...
    靜默虛空閱讀 762評論 0 5

友情鏈接更多精彩內(nèi)容