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

歡迎訪問 生活随笔!

生活随笔

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

linux

十四、Linux进程编程

發布時間:2025/4/5 linux 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 十四、Linux进程编程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、進程概念

????????進程和線程的對比網上很多資料有介紹,這邊有一篇文章,大家可以參考一下:https://www.cnblogs.com/qianqiannian/p/7010909.html

linux上查看進程的命令:top,就可以像window下查看任務管理器一下。按q退出。

二、進程ID

1、每一個進程都有一個唯一的標識符,進程ID 簡稱pid

  • 進程id 一般默認的最大值為32768,不過也是可以修改的,當然一般情況下不需要這么做。如果當前進程是1000,那么下一個分配的進程就是1001,它是嚴格線性分配的。
  • 除了init 進程,其它進程都是由其它進程創立的。創立新進程的進程叫父進程,新進程叫子進程。

2、獲取子進程的函數
?????????pid_t getpid(void)
????????– 參數:無
????????– 返回值:成功返回進程號
3、獲取父進程的函數
????????pid_t getppid(void)
????????– 參數:無
????????– 返回值:成功返回父進程?

#include <stdio.h> #include <sys/types.h> #include <unistd.h>void main() {pid_t idp,id;idp = getppid();printf("ppid = %d\n",idp);id = getpid();printf("pid = %d\n",id); }

三、exec函數族

1、2linux中,可以使用exec函數族將程序載入內存,實現多個程序的運行。

2、exec函數族參數?

int execl(const char *path, const char *arg, ...)
函數說明:
execl()其中后綴"l"代表list也就是參數列表的意思,第一參數path字符指針所指向要執行的文件路徑, 接下來的參數代表執行該文件時傳遞的參數列表:argv[0],argv[1]... 最后一個參數須用空指針NULL作結束。

函數返回值:
成功則不返回值, 失敗返回-1。

3、execl函數特點:

  當進程調用一種exec函數時,該進程完全由新程序代換,而新程序則從其main函數開始執行。因為調用exec并不創建新進程,所以前后的進程ID并未改變。exec只是用另一個新程序替換了當前進程的正文、數據、堆和棧段。

  用另一個新程序替換了當前進程的正文、數據、堆和棧段。

  當前進程的正文都被替換了,那么execl后的語句,即便execl退出了,都不會被執行。
?

4、應用例程:代碼1將調用代碼2,代碼2將替換代碼1,

代碼1:

#include<stdio.h> #include<string.h> #include<stdlib.h> #include <unistd.h>//exec函數族 int main(void) {if(execl("/mnt/udisk/helloexec","helloexec","execl",NULL) == -1){perror("execl error");exit(1);}//程序已經跳轉走,如果正常execl不反回錯誤,下面的代碼不會執行!printf("execl error!\n");return 0; }

代碼2:

#include <stdio.h>int main(int arc,char *argv[]) {printf("Hello %s!\n",argv[1]); }

5、exec函數簇還有很多其他的函數。

exec函數族參數
????????– “l”和“v”表示參數是以列表還是以數組的方式提供的
????????– “p”表示這個函數的第一個參數是*path,就是以絕對路徑來提供程序的路徑,也可以以當前目錄作為目標
????????– “e”表示為程序提供新的環境變量

如下圖,這邊就不一一介紹了,大家可以在終端里輸入man 3 exec?打開幫助文檔,自己查看具體用法。

四、fork創建新進程

1、linux中,可以使用fork函數創建和當前進程一模一樣的進程,叫子進程,原來的進程叫父進程。

2、創建進程函數
????????pid_t fork(void)
????????– 參數:無
????????– 返回值:執行成功,子進程pid 返回給父進程,0 返回給子進程;出現錯誤-1,返回給父進程。執行失敗的唯一情況是內存不夠或者id 號用盡,不過這種情況幾乎很少發生。

#include <stdio.h> #include <unistd.h>main() {pid_t pid;int i=100;pid = fork();//調用出錯if(pid == -1){printf("fork failed\n");return 1;}//返回給父進程子進程號,返回值大于0else if(pid){i++;printf("\nThe father i = %d\n",i);printf("The father return value is %d\n",pid);printf("The father pid is %d\n",getpid());printf("The father ppid is %d\n",getppid());while(1);}//返回子進程0,返回值等于0返回給子進程else{i++;printf("\nThe child i = %d\n",i);printf("The child return value is %d\n",pid);printf("The child pid is %d\n",getpid());printf("The child ppid is %d\n",getppid());while(1);}return 0; }

運行結果如下:?

總結

以上是生活随笔為你收集整理的十四、Linux进程编程的全部內容,希望文章能夠幫你解決所遇到的問題。

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