導航:首頁 > 操作系統 > linux中exec

linux中exec

發布時間:2022-08-17 08:24:32

linux中system和exec函數的區別

system是用shell來調用程序=fork+exec+waitpid,而exec是直接讓你的程序代替用來的程序運行。
system 是在單獨的進程中執行命令,完了還會回到你的程序中。而exec函數是直接在你的進程中執行新的程序,新的程序會把你的程序覆蓋,除非調用出錯,否則你再也回不到exec後面的代碼,就是說你的程序就變成了exec調用的那個程序了。
看一下,下面的例子.
例子1
---------------------------------
system("your_program");
printf("You can see me! ");
---------------------------------
例子2
---------------------------------
exec("your_program");
printf("You can't see me! ");
---------------------------------
在例子1中,在你的程序執行完畢以後,會執行printf語句。
在例子2中,由於exec將程序your_program代替了本身,因此程序不再會執行printf語句。
在Linux下,exec通常會和fork語句一起用。
看下面的這個例子
--------------------------------------------
pid_t pid = fork();
if (pid < 0) {
printf(「fork error!」);
exit(-1);
} else if (pid == 0) {
//這里是子進程
printf("I'm son! ");
//執行其它的程序
exec("your_program");
} else {
//這里是父進程
printf("i'm father!");
wait();//等待子進程結束後返回
exit(0);
}

② linux shell腳本 解釋exec

判斷/var/log/x.log文件是否為空
如果為空,則將exec的操作結果放入/var/log/x.log中
exec應該是一個命令,但是這邊這個語法沒有意義

③ 關於Linux的shell的exec命令

wall是向所有登錄系統的用戶發送信息,消息的內容是 "Thanks for all the fish" , 相當於簡訊群發。
exec 3<afile 打開文件afile,文件描述符是3,然後這個3就可以代表文件afile,比如
cat <&3 查看文件afile的內容

④ linux中fork,source和exec的區別

fork是系統調用,用來創建子進程。
source 讀取函數,讀取配置文件的時候用,不創建子進程,也是'.'
exec是創建進程,但是是創建的進程取代原來的進程,
所以fork是繼承皇位,exec是推翻皇朝;
比如安卓系統中:就是用exec進行rootfs切換的;因為他用的是busybox,所以真假rootfs之間的切換用exec的;

⑤ linux 系統中execl的作用是

intexecl(constchar*path,constchar*arg,...);

是系統提供的介面函數

execl是exec函數族中的一員

exec族函數的功能是載入一個新的程序替換掉當前的進程

它可以調用一個外部程序到當前的進程空間里

但不會產生一個新的進程(它只是將當前進程的映像替換成新載入的程序的映像)


可以寫一個程序清楚地看到

d.c

#include<stdio.h>
#include<unistd.h>

intmain(intargc,char**argv)
{
printf("pid=%dppid=%d ",getpid(),getppid());

return0;
}

f.c

#include<stdio.h>
#include<unistd.h>

intmain(intargc,char**argv)
{
printf("pid=%dppid=%d ",getpid(),getppid());
execl("./d","d",NULL);

return0;
}

在未執行execl調用之前和執行execl之後pid和ppid完全相同

由此可見execl並沒有創建新的進程

⑥ linux進程通信 中的exec問題

哪裡寫的這些...好亂阿..

先解釋下基本的:

int main(argc,char * argv[])
main的參數,就是命令行參數.

比如你的可執行文件是test,你希望在程序執行時傳入IP地址,那麼可以這樣:

./test 127.0.0.1

此時,argc =1,argv[1]是就是指向"127.0.0.1"指針(命令參數全部當作字元串來處理的)。
而 argv[0]就代表第一個參數,這里對應的就是"./test"。
argc和argv在mian裡面都是可以使用的,出了main的范圍就不能使用了。

再來說你提出的第一個地方,exec的問題。

exec實際上包含了一組函數,execl, execlp, execle, execv, execvp, execvpe
具體使用方法,你man execv就可以得到這些函數的使用方法。

exec函數的作用是,產生一個新進程,結束當前進程(具體執行的操作是復制當前進程的一部分數據和許可權,然後根據參數啟動一個新的進程)。

exec這組函數執行時候,需要提供的參數包括:一個可執行程序的路徑,傳遞給可執行程序的參數。(這里的參數,與剛才說到的main的參數含義相同。)

說到這里應該明白了吧...就一個。

我不知道你要hello world干什麼...照你意思給寫了個.

第一個,就是你貼出來的代碼改動一點點(我這邊運行有點問題):

#include <stdio.h>
main(int argc,char* argv[])
{
int i=0
while(i<=argc)
{
printf("arguement %d : %s ",i,argv[i]);
printf("\n");
i++;
}
}

運行程序:
$gcc test.c -o test
$./test hello world
輸出結果:
[ksl@myhost WGX]$ ./test hello world
Arguement 0:./test
Arguement 1:hello
Arguement 2:world
Arguement 3:(null)

然後第二個,使用exec的例子,我用execl吧..
文件名是test1.c

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

void main(int argc,char *argv[])
{
printf("This is not exec...");

execl("./test","hello","world",NULL);

//如果exec執行正常,下面的printf將不會被執行
//因為當前進程已經結束,./test將被執行
printf("exec error");
}

輸出結果:
[ksl@myhost WGX]$ ./test1
Arguement 0:hello
Arguement 1:world
Arguement 2:(null)

後者並沒輸出"./test"....就是exec啟動的程序,其命令行參數中只有參數.(我也不曉得原因...=.=||)

⑦ linux下exec函數不返回結果

yes you are right , exec 是不返回的,它將當前進程的內容替換成要執行的程序的內容,這樣就可以運行一個新的程序了。如果exec 返回了說明執行新程序出錯了,內存不夠啊,系統異常啊。。

⑧ linux exec命令主要用來干什麼的啊

從外部看是執行一個外部程序,從內部看是開啟一個進程來執行目標程序。

閱讀全文

與linux中exec相關的資料

熱點內容
如何把蘋果的視頻傳到安卓手機 瀏覽:612
介面伺服器怎麼使用 瀏覽:62
蘋果怎麼實現安卓全面屏手勢 瀏覽:977
拳皇97最強宏命令 瀏覽:921
linux安裝svn查看 瀏覽:850
內置函數計算絕對值python 瀏覽:88
千聊免費課程可以重新加密嗎 瀏覽:507
python能代替php嗎 瀏覽:252
phpexcel樣式 瀏覽:265
安卓手機有沒有什麼軟體可以阻止彈廣告的 瀏覽:306
linux區域網搭建伺服器 瀏覽:690
python編譯器mac 瀏覽:293
windows的doc命令 瀏覽:463
nfc全加密門禁卡 瀏覽:636
身份信息被加密 瀏覽:482
我的鹽城app怎麼添加不了家庭成員 瀏覽:493
php商城並發 瀏覽:348
熊貓繪畫app怎麼做出大佬的筆刷 瀏覽:603
雲存儲伺服器知識 瀏覽:461
伺服器cpu是什麼指令集 瀏覽:592