exec进程替换
1.exec 系列替換過程:pcb 使用以前的只修改,進程實體更換。
我們在linux系統上寫的進程都會經過bash的fork產生PCB和進程塊,再利用進程替換,將進程塊替換為新的進程。所以我們寫的程序(除去我們在自己的進程fork的進程)查看父進程會發現都是bash。
頭文件:#include <unistd.h>
2.以execl用ps 替換當前程序為例,介紹 exec 系統函數使用,注意該系列方法功能都一樣,沒有區別,只是參數不同:
#include<stdio.h> #include<unistd.h> #include<assert.h> #include<fcntl.h> #include<stdlib.h>int main() {printf("pid = %d\n",getpid());execl("/usr/bin/ps","ps","-f",NULL);printf("execl error\n");exit(0); }注意:我們只要將替換為什么進程寫對,后面傳給新程序的主函數的第一個參數寫成其他的也沒關系,因為我們知道第一個參數一般為程序的名字,第一個參數更換只是相當與換個程序名字而已。比如我們將參數ps傳成pss,執行程序也能達到相同效果。只不過將程序名子從ps叫成pss而已。
運行結果:
進程替換只是將原本的test進程更換,并沒有更換PCB(即進程控制塊,在計算機基礎中談過)。
下面將各種方法用法示例都寫出來。注意第一個參數不需要寫路徑的會默認去到PATH下找。
記不住也沒關系,其實哪個都可以用,隨便記住兩個就行,記不住查看一下問題不大。
總結
- 上一篇: 孤儿进程和僵死进程处理方法
- 下一篇: Linux信号的使用