国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > Linux Shell > 正文

Linux進程控制詳解及實例

2020-07-27 18:55:34
字體:
來源:轉載
供稿:網友

Linux進程控制詳解及實例

常用函數:

  • fork() 通過復制調用進程來建立新的進程,是最基本的進程建立操作。
  • exec   包括一系列的系統調用,其中每個系統調用都完成相同的功能,即通過用一個新的程序覆蓋原內存空間,來實現進程的轉變。各種exec系統調用之間的區別僅在于它們的參數構造不同。
  • wait() 它提供了初級的進程同步措施,能使一個進程等待,直到另一個進程結束為止。
  • exit()  常用來終止一個進程的運行。

進程的建立

  如果fork()調用成功,就會使內核建立一個新的進程,所建的新進程是調用fork()進程的副本。也就是說,新的進程運行與其創建者一樣的程序,其中的變量具有與創建進程變量相同的值。

  系統調用fork()沒有參數,它返回一個pid_t類型的值pid。pid被用來區分父進程和子進程。在父進程中pid被置為一個非0的正整數;在子進程中,pid被置為0。

進程的運行

  exec系列調用:

int execl(const char* path, const char *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[]);

  由于參數的個數是任意的,所以必須用一個null指針來標記參數表的結尾。下面給出一個使用execl()和execv()調用來運行ls的例子:   

/*execl的例子*/#include <stdio.h>#include <unistd.h>main(){  printf("Excuting ls/n");  execl("/bin/ls", "ls", "-l", NULL);  /*如果execl返回,說明調用失敗*/  perror("execl failed to run ls");  exit(1);}/*execv的例子*/#include <stdio.h>#include <unistd.h>main(){  char *cmd[]={"ls", "-l", NULL};  execv("/bin/ls", cmd);  perror("execv failed");  exit(1);}

系統調用execlp()和execvp()分別類似于系統調用execl()和execv(),它們的主要區別是:execlp()和execvp()的第一個參數指向的是一個簡單的文件名,而不是一個路徑名。它們通過檢索shell環境變量PATH指出的目錄,來得到該文件名的路徑前綴部分。

exec和fork()的聯用

  通過聯用可以實現父進程運行一個與其不同的子進程,并且父進程不會被覆蓋。下面給出一個 exec和fork()聯用的例子:  

#include <stdio.h>#include <unistd.h>main(){  int pid;  /*fork子進程*/  pid = fork();  switch(pid){    case -1:      perror("fork failed.");      exit(1);    case 0:      execl("/bin/ls", "ls", "-l", NULL);      perror("execl failed.");      exit(1);    default:      wait(NULL);      printf("ls completed./n");      exit(0);  }}

  在fork()調用之前,只有一個進程A,fork()調用后就有了進程A和B。A是父進程,它正在執行系統調用wait(),使進程A睡眠,直至進程B結束。同時進程B正在用execl裝入命令ls。exec調用后,進程B的程序被ls的代碼取代,執行ls命令的代碼。

 感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 通城县| 遂昌县| 聂拉木县| 刚察县| 三穗县| 闽侯县| 封丘县| 大同县| 和田县| 鄱阳县| 安乡县| 雅江县| 治县。| 浮山县| 四子王旗| 桐乡市| 南昌市| 晋城| 开原市| 漳浦县| 屯门区| 肥城市| 甘谷县| 古田县| 怀集县| 凤城市| 全南县| 上蔡县| 永和县| 丰镇市| 镇江市| 夏津县| 喀喇沁旗| 清苑县| 临夏县| 镇远县| 缙云县| 长乐市| 全椒县| 兴城市| 宁城县|