linux的子程序呼叫exec( )系列函式
下面我們來看看一個程序如何來啟動另一個程式的執行。在Linux中要使用exec函式族。系統呼叫execve()對當前程序進行替換,替換者為一個指定的程式,其引數包括檔名(filename)、引數列表(argv)以及環境變數(envp)。exec函式族當然不止一個,但它們大致相同,在Linux中,它們分別是:execl,execlp,execle,execv,execve和execvp,下面我只以execlp為例,其它函式究竟與execlp有何區別,請通過manexec命令來了解它們的具體情況。
一個程序一旦呼叫exec類函式,它本身就"死亡"了,系統把程式碼段替換成新的程式的程式碼,廢棄原有的資料段和堆疊段,併為新程式分配新的資料段與堆疊段,唯一留下的,就是程序號,也就是說,對系統而言,還是同一個程序,不過已經是另一個程式了。(不過exec類函式中有的還允許繼承環境變數之類的資訊。)
相關推薦
linux的子程序呼叫exec( )系列函式
exec( )函式族 : 下面我們來看看一個程序如何來啟動另一個程式的執行。在Linux中要使用exec函式族。系統呼叫execve()對當前程序進行替換,替換者為一個指定的程式,其引數包括檔名(filename)、引數列表(argv)以及環境變數(envp)。exec函式族當然不止一個,但它們大致相同,
Linux中exec系列函式的應用
這段時間在研究linux中使用者登陸和shell執行程式的原理。我們知道,shell命令分為內部命令和外部命令,內部命令有諸如cd,history,exit,echo等,常見的外部命令有ls,ping,netstat等,通過type命令可以檢視一個命令是內部命令還是外部命令
C程式呼叫shell指令碼共有三種方式:system()、popen()、exec系列函式
1)system(shell命令或shell指令碼路徑); 執行過程:system()會呼叫fork()產生子程序,由子程序來呼叫/bin/sh-c string來執行引數string字串所代表的命令,此命令執行完後隨即返回原呼叫的程序。在呼叫system()期間SI
linux子程序和父程序的關係
子程序繼承父程序 使用者號UIDs和使用者組號GIDs 環境Environment 堆疊 共享記憶體 開啟檔案的描述符 執行時關閉(Close-on-exec)標誌 訊號(Signal)控制設定 程序組號 當前工作目錄 根目錄
python子程序不支援input函式
問題 寫多程序程式的時候,在子程序呼叫的函式內部呼叫了input函式,提示EOFError: EOF when reading a line,具體如下錯誤: 抽象出來的程式碼如下: #encoding=utf-8 from multiprocessing import Pool,P
exec系列函式
int execl(const char *pathname, const char *arg0, ... /* (char *)0 */ ); execl()函式用來執行引數path字串所指向的程式,第二個及以後的引數代表執行檔案時傳遞的引數列表,最後一個引數必須是空指標以標誌引數列表為空.
多執行緒的程序呼叫exec時,將終止整個程序
由於本人才疏學淺,本文難免存在遺漏之處,歡迎大家留言指正,本人將感激不盡。 最近比較好奇,若是一個多執行緒的程序執行exec()系統呼叫時,程序將作何反應,詳情請如下程式碼: #include <stdio.h> #include <st
linux子程序知道父程序退出的解決方案
在實際開發中難免會處理程序間的關係,最常見的是父子程序的相互監督。父程序等待子程序,或者自程序知道父程序執行是否結束,以方便釋放資源。 一、關於程序 程序是作業系統進行資源分配和排程的基本單位。linux系統使用fork建立程序,程序pid 0是swapper程序,程序pi
Linux子程序繼承父程序的檔案描述符
/* tcp_server.c */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <sys/type
Linux程序分析(三) fork迴圈建立Linux子程序
fork fork的意思是複製程序,就是把當前的程式再載入一次,載入後,所有的狀態和當前程序是一樣的(包括變數)。fork不象執行緒需提供一個函式做為入口, fork後,新程序的入口就在 fork的下一條語句。 返回值為pid_t,實際是unsigned i
fork應用---子程序呼叫execve
//open.c 檔案 1.父程序中開啟一個現有檔案123.c,fork出一個子程序 2.子程序中呼叫execve函式,新的程序替換子程序 #include <stdio.h> #
LINUX ltrace命令-用來跟蹤程序呼叫庫函式的情況學習
參考連結: http://www.bluestep.cc/linux-ltrace%E5%91%BD%E4%BB%A4-%E7%94%A8%E6%9D%A5%E8%B7%9F%E8%B8%AA%E8%BF%9B%E7%A8%8B%E8%B0%83%E7%94%A8%E5%BA%93%E5%87%
Linux:程序控制(fork/vfork)(程序終止:exit/_exit)(程序等待:wait/waitpid/status)(程序替換:exec函式/shell實現)
目錄 程序建立 fork原理 fork函式返回值 fork用法和呼叫失敗的原因 vfork函式 總結 程序終止 程序退出場景: 程序常見退出方法 return退出 _exit函式 exit函式 總結: 程序等待 程序等待的
Linux程序控制——exec函式族
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
exec族函式詳解及迴圈建立子程序
前言:之前也知道exec族函式,但沒有完全掌握,昨天又重新學習了一遍,基本完全掌握了,還有一些父子程序和迴圈建立子程序的問題,還要介紹一下環境變數,今天分享一下。 一、環境變數 先介紹下環境的概念和特性,再舉例子吧。 環境變數,是指在作業系統中用來指定作業系統執行環境的一些引數。通常具備
Linux生成子程序函式fork()
一片非常詳細的文章:http://www.csl.mtu.edu/cs4411.ck/www/NOTES/process/fork/create.html #include <stdio.h> #include <stdlib.h> #include <
c/c++ linux 程序間通訊系列7,使用pthread mutex
linux 程序間通訊系列7,使用pthread mutex #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/shm.h> #include <pthr
c/c++ linux 程序間通訊系列4,使用共享記憶體
linux 程序間通訊系列4,使用共享記憶體 1,建立共享記憶體,用到的函式shmget, shmat, shmdt 函式名 功能描述 shmget 建立共享記憶體,返回pic key
c/c++ linux 程序間通訊系列3,使用socketpair,pipe
linux 程序間通訊系列3,使用socketpair,pipe 1,使用socketpair,實現程序間通訊,是雙向的。 2,使用pipe,實現程序間通訊 使用pipe關鍵點:fd[0]只能用於接收,fd[1]只能用於傳送,是單向的。 3,使用pipe,用標準輸入往裡寫。 疑問:在
c/c++ linux 程序間通訊系列2,使用UNIX_SOCKET
linux 程序間通訊系列2,使用UNIX_SOCKET 1,使用stream,實現程序間通訊 2,使用DGRAM,實現程序間通訊 關鍵點:使用一個臨時的檔案,進行資訊的互傳。 s_un.sun_family = AF_UNIX; strcpy(s_un.sun_path, "