天天看點

UINX标準C - 程序管理

程序與程式的關系:

  1.程式就是存儲在磁盤上可執行的二進制檔案,

  2.程序是一個正在執行的的程式,不過一個程式可能存在多個程序執行個體。

檢視程序中的pid和擷取pid(程序号)

  1.終端指令:ps  aux   檢視所有的正在進行的程序,顯示出使用者名,程序号,cup占用比,記憶體占用比等    

  2.終端指令:ps   aux  |  grep  pid   可過濾其他的無關的pid,可以直接檢視目标pid

  3.标準c:  getpid()檢視目前程序的pid   getppid()檢視父程序的pid             

子程序的建立(目前程序中建立子程序)

  1.fork():pid_t    fork(void);

    a.建立出子程序,程式開始時,子程序将父程序中的全局段,靜态資料段,堆,棧,IO緩沖區中的資料都拷貝一份,并且會共享代碼段。

    b.此函數如果建立成功會傳回兩個值(0和子程序的pid),這兩個值沒有先後順序。如果建立失敗則會傳回-1。

  2.vfork()和exec聯合才能使用:pid_t  vfork(void);   int   exec(const char* path,const char *arg...)  執行個體 exec(“路徑”,“a.out”,NULL);

    a.vfork()建立出子程序,不過程式開始時,子程序之間不會拷貝父程序中全局段,靜态資料段,堆,棧,IO緩沖區中的資料不會拷貝,也不會貢獻代碼段,此函數執行是有先後順序的,子程序如果還未結束,父程序就不會執行。

    b.exec()通過此函數建立的子程序會替換掉父程序給的代碼段,此函數不是重新建立一個新的pid,而是加載一個可執行檔案。  

程序的退出和異常終止

  1.退出:

      a.return函數        b.系統函數_exit(stat)和标準C函數_Exit         c.标準exit調用_exit/_Exit      d.最後一個線程結束,直接退出

  2.異常終止:

      a.通過函數abort()       b.程式運作時,通過一些鍵位來取消操作     c.線程中取消運作

程序的回收 

  1.wait: pid_t   wait(int* status)

    a.等待指定的子程序結束,父程序進行會收,status是子程序結束後的傳回值。

    b.所有子程序在進行時,父程序會阻塞。

  2.waitpid:pid_t   waitpid(pid_t  pid,int* status,int option)

轉載于:https://www.cnblogs.com/goul/p/9362592.html