Bash

為什麼 Bash 在子 shell 中執行腳本?

  • May 1, 2020

為什麼 Bash shell 在子 shell 中執行腳本?這樣做有什麼好處?

最初稱為系統的“使用者界面”的外殼被賦予執行程序(也稱為任務)的責任。為了呼叫任務,shell 會依次要求核心執行任務。核心管理任務將使用的記憶體以及讀取或寫入文件的權限。要讓核心“執行”一個程序,基本的方法是派生一個新任務(給它一個新的 PID(程序號)),然後在這個新的 PID 中執行新程序。核心將收到一個參數列表:

int execve(const char *filename, char *const argv[], char *const envp[]);

基本上要求核心filename使用 arguments執行argv[]。核心做被要求做的事情,當程序終止時,控制權返回父程序。

以 shell 作為程序的執行者,它顯然是一個擴展,它還可以執行一些解釋器可以理解的文本文件。#! /interpreter這就是核心也理解的shebang機制。

因此,shell 可以(有時會)“執行腳本”,但最自然的執行順序是要求核心像處理任何其他程序一樣:載入程序並賦予它對程序的控制權 (PID)。

預計在不同 PID 內執行的任何程序都不會污染父 PPID。也就是說:一個PID的變化不會影響父PID。

因此,當“腳本”被執行時,它(通常)會獲得一個新的 PID。它是否被稱為 subshel​​l 或子 shell 有時會讓人感到困惑,但重要的是它在不同的 PID 中執行。通常是子程序(PID)。

引用自:https://unix.stackexchange.com/questions/583539