进程程序替换(自主实现shell)
進程替換
替換進程所運行的程序
流程:將另一段代碼加載到內存中,通過頁表將原來進程的映射關系重新建立到新的程序在內存中的地址,相當于替換了進程所運行程序以及所要處理的數據
(替換了代碼段,重新初始化數據段)
目的:讓程序執行其他任務
如何替換:exec函數家族
execl execlp execle execv execvp? (這五個為庫函數)
execve (這個為系統調用函數)
命名理解:
l(list) : 表示參數采用列表
v(vector) : 參數用數組
p(path) : 有p自動搜索環境變量PATH
e(env) : 表示自己維護環境變量?
?
l 與 v的區別:
execl ( ls, -a, -i, NULL )——參數平鋪賦予
execv ( )——用數組傳輸
有p 與沒有 p 的區別:是否自動到 PATH 所指定的路徑下查找程序文件
不帶 p 需要自己給路徑
execl (" bin/ls", "ls", "-1", NULL)
execlp ("ls", "ls", "-1", NULL)
有沒有 e 的區別:是否自定義環境變量
env[0] = "MYENV = 1000" env[1] = NULL
execle (" /bin/ls", "ls", "-a", NULL, env)
?
main函數中的參數解析:
int main(init argc, char* argv[], char* env[])
argc:程序中有幾個命令行參數
argv:用于儲存這些參數
env:用于儲存環境變量
?
自主實現一個簡易的minishell:
代碼實現:
?
轉載于:https://www.cnblogs.com/cuckoo-/p/11039188.html
總結
以上是生活随笔為你收集整理的进程程序替换(自主实现shell)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DS博客作业07--查找
- 下一篇: Linux操作系统下如何利用SSH进行远