欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Linux進(jìn)程控制詳解及實(shí)例

 更新時(shí)間:2017年04月18日 11:39:28   作者:bamb00  
這篇文章主要介紹了Linux進(jìn)程控制詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下

Linux進(jìn)程控制詳解及實(shí)例

常用函數(shù):

  • fork() 通過復(fù)制調(diào)用進(jìn)程來建立新的進(jìn)程,是最基本的進(jìn)程建立操作。
  • exec   包括一系列的系統(tǒng)調(diào)用,其中每個(gè)系統(tǒng)調(diào)用都完成相同的功能,即通過用一個(gè)新的程序覆蓋原內(nèi)存空間,來實(shí)現(xiàn)進(jìn)程的轉(zhuǎn)變。各種exec系統(tǒng)調(diào)用之間的區(qū)別僅在于它們的參數(shù)構(gòu)造不同。
  • wait() 它提供了初級的進(jìn)程同步措施,能使一個(gè)進(jìn)程等待,直到另一個(gè)進(jìn)程結(jié)束為止。
  • exit()  常用來終止一個(gè)進(jìn)程的運(yùn)行。

進(jìn)程的建立

  如果fork()調(diào)用成功,就會使內(nèi)核建立一個(gè)新的進(jìn)程,所建的新進(jìn)程是調(diào)用fork()進(jìn)程的副本。也就是說,新的進(jìn)程運(yùn)行與其創(chuàng)建者一樣的程序,其中的變量具有與創(chuàng)建進(jìn)程變量相同的值。

  系統(tǒng)調(diào)用fork()沒有參數(shù),它返回一個(gè)pid_t類型的值pid。pid被用來區(qū)分父進(jìn)程和子進(jìn)程。在父進(jìn)程中pid被置為一個(gè)非0的正整數(shù);在子進(jìn)程中,pid被置為0。

進(jìn)程的運(yùn)行

  exec系列調(diào)用:

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[]);

  由于參數(shù)的個(gè)數(shù)是任意的,所以必須用一個(gè)null指針來標(biāo)記參數(shù)表的結(jié)尾。下面給出一個(gè)使用execl()和execv()調(diào)用來運(yùn)行l(wèi)s的例子:   

/*execl的例子*/
#include <stdio.h>
#include <unistd.h>

main(){
  printf("Excuting ls\n");
  execl("/bin/ls", "ls", "-l", NULL);
  /*如果execl返回,說明調(diào)用失敗*/
  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);
}

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

exec和fork()的聯(lián)用

  通過聯(lián)用可以實(shí)現(xiàn)父進(jìn)程運(yùn)行一個(gè)與其不同的子進(jìn)程,并且父進(jìn)程不會被覆蓋。下面給出一個(gè) exec和fork()聯(lián)用的例子:  

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

main(){
  int pid;
  /*fork子進(jìn)程*/
  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()調(diào)用之前,只有一個(gè)進(jìn)程A,fork()調(diào)用后就有了進(jìn)程A和B。A是父進(jìn)程,它正在執(zhí)行系統(tǒng)調(diào)用wait(),使進(jìn)程A睡眠,直至進(jìn)程B結(jié)束。同時(shí)進(jìn)程B正在用execl裝入命令ls。exec調(diào)用后,進(jìn)程B的程序被ls的代碼取代,執(zhí)行l(wèi)s命令的代碼。

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

相關(guān)文章

  • Shell腳本實(shí)現(xiàn)獲取網(wǎng)頁快照并生成縮略圖

    Shell腳本實(shí)現(xiàn)獲取網(wǎng)頁快照并生成縮略圖

    這篇文章主要介紹了Shell腳本實(shí)現(xiàn)獲取網(wǎng)頁快照并生成縮略圖,本文獲取網(wǎng)頁快照使用phantomjs、生成縮略圖使用ImageMagick,需要的朋友可以參考下
    2015-02-02
  • shell中tail和head的用法小結(jié)

    shell中tail和head的用法小結(jié)

    本文主要介紹了shell中tail和head的用法小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-09-09
  • Linux Shell腳本系列教程(七):腳本調(diào)試

    Linux Shell腳本系列教程(七):腳本調(diào)試

    這篇文章主要介紹了Linux Shell腳本系列教程(七):腳本調(diào)試,本文講解了Bash內(nèi)建調(diào)試功能和自定義調(diào)試功能等內(nèi)容,需要的朋友可以參考下
    2015-06-06
  • Shell中case...in分支語句的應(yīng)用

    Shell中case...in分支語句的應(yīng)用

    shell作為一種腳本編程語言,同樣包含循環(huán)、分支等其他程序控制結(jié)構(gòu),從而輕松完成更加復(fù)雜、強(qiáng)大的功能,本文主要介紹了Shell中case...in分支語句的應(yīng)用,感興趣的可以了解一下
    2023-08-08
  • find命令的結(jié)果順序是什么

    find命令的結(jié)果順序是什么

    這篇文章主要介紹了find命令的結(jié)果順序是什么,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • Linux使用iptables實(shí)現(xiàn)屏蔽ip地址的示例詳解

    Linux使用iptables實(shí)現(xiàn)屏蔽ip地址的示例詳解

    netfilter/iptables(簡稱為iptables)組成Linux平臺下的包過濾防火墻,與大多數(shù)的Linux軟件一樣,這個(gè)包過濾防火墻是免費(fèi)的。本文就來利用iptables實(shí)現(xiàn)屏蔽ip地址,需要的可以參考一下
    2022-10-10
  • shell腳本兩個(gè)文件關(guān)鍵行合并方式

    shell腳本兩個(gè)文件關(guān)鍵行合并方式

    這篇文章主要介紹了shell腳本兩個(gè)文件關(guān)鍵行合并方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 很實(shí)用的Linux 系統(tǒng)運(yùn)維常用命令及常識(超實(shí)用)

    很實(shí)用的Linux 系統(tǒng)運(yùn)維常用命令及常識(超實(shí)用)

    作為Linux運(yùn)維,需要了解Linux操作系統(tǒng)的基本使用和管理知識,下面腳本之家小編給大家介紹下Linux運(yùn)維需要掌握的命令,想成為Linux運(yùn)維的朋友可以來學(xué)習(xí)一下
    2016-10-10
  • awk實(shí)現(xiàn)Left、join查詢、去除重復(fù)值以及局部變量講解例子

    awk實(shí)現(xiàn)Left、join查詢、去除重復(fù)值以及局部變量講解例子

    這篇文章主要介紹了awk實(shí)現(xiàn)Left、join查詢、去除重復(fù)值以及局部變量講解例子,awk的高級使用技巧,需要的朋友可以參考下
    2014-07-07
  • 詳解linux下tree命令的用法

    詳解linux下tree命令的用法

    tree是一種遞歸目錄列表命令,產(chǎn)生一個(gè)深度縮進(jìn)列表文件,這是彩色的ALA dircolors如果ls_colors設(shè)置環(huán)境變量和輸出是TTY。下面通過本文給大家分享linux下tree命令的用法,感興趣的朋友一起看看吧
    2017-09-09

最新評論