日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux下exec系列(一)

發布時間:2023/12/9 linux 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux下exec系列(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

fork()是用于建立進程的手段之一,但是fork()只能建立相同程序的副本。幸運的是,Linux系統還提供了系統調用exec系列。它可用于新程序的運行。

如果exec調用成功,調用進程將被覆蓋,然后從新程序的入口開始執行。這樣就產生了一個新的進程,但是它的進程標識符與調用進程相同。這就是說,exec沒有建立一個與調用進程并發的新進程,而是用新進程取代了原來的進程。所以,對exec調用成功后,沒有任何數據返回,這與fork()不同。

下面給出了exec系列調用在Linux系統中unistd.h中的函數聲明:

int execl(const char *path, const *arg, ...); int execlp(const char *file, const char *arg, ...); int execle(const char *path, const char *arg, ..., char* const envp[]); int execv(const char *path, char* const argv[]); int execvp(const char *file, char* const argv[]);


下面來看一個exec函數的示例:

#include <stdio.h> #include <unistd.h>int main() {printf("Executing ls\n");execl("/bin/ls", "ls", "-la", NULL);printf("------End of execl()\n");// 輸出了下面的語句就表明execl調用失敗了perror("execl failed to run ls");return 0; }


運行結果:

Executing ls 總用量 56 drwxrwxr-x 2 zcm zcm 4096 11月 2 16:26 . drwxr-xr-x 11 zcm zcm 4096 10月 17 11:26 .. -rwxrwxr-x 1 zcm zcm 5396 9月 21 11:17 p0 -rw-r--r-- 1 zcm zcm 455 9月 21 11:16 p0.c -rwxrwxr-x 1 zcm zcm 5195 11月 2 16:26 p1 -rw-r--r-- 1 zcm zcm 259 11月 2 16:26 p1.c -rwxrwxr-x 1 zcm zcm 5051 9月 21 10:23 p2 -rw-r--r-- 1 zcm zcm 152 9月 21 10:23 p2.c -rwxrwxr-x 1 zcm zcm 5489 10月 17 09:26 travel -rw-rw-r-- 1 zcm zcm 1405 10月 17 09:26 travel.c [zcm@c #64]$


注意到了嗎:沒有“printf("------End of execl()\n"); “的輸出噢。這正好說明了:exec沒有建立一個與調用進程并發的新進程,而是用新進程取代了原來的進程。

總結

以上是生活随笔為你收集整理的linux下exec系列(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。