中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Linux進程控制的示例分析

發布時間:2021-07-15 10:01:26 來源:億速云 閱讀:108 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關Linux進程控制的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

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命令的代碼。

關于“Linux進程控制的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

吕梁市| 保康县| 平江县| 楚雄市| 盱眙县| 仁寿县| 南涧| 白沙| 康乐县| 类乌齐县| 巴林右旗| 朝阳市| 屏东市| 霍城县| 叙永县| 娄底市| 阳曲县| 武功县| 上犹县| 罗甸县| 星子县| 环江| 江都市| 延长县| 漳州市| 长子县| 电白县| 五家渠市| 沽源县| 南平市| 柘城县| 永平县| 平谷区| 资讯| 龙山县| 柞水县| 佳木斯市| 黄冈市| 汕尾市| 林周县| 安宁市|