前些時候寫過基於fork(),execvp()和wait()實現類linux下的bash——mybash,裏面有着我關於fork(),execvp()和wait()的一點看法。 |
問題2:怎麼對於僵死子進程,此時父進程已終止,子進程由誰回收,且父進程的父進程是誰,是其子進程的「爺爺」進程嗎,回收父進程的是誰,是「爺爺」進程仍是init進程?html
測試1:測試父進程等待子進程並回收其java
#include<sys/types.h> #include<sys/wait.h> #include<unistd.h> #include<stdio.h> #include<stdlib.h> void main() { int i=0; pid_t pid; printf("p_pid=%d\n",getppid()); pid=fork(); wait(NULL); if(pid==0){ //sleep(10); printf("cp_pid=%d\n",getppid()); } printf("this pid is %d\n",getpid()); exit(1); }
#include<sys/types.h> #include<sys/wait.h> #include<unistd.h> #include<stdio.h> #include<stdlib.h> void main() { int i=0; pid_t pid; printf("p_pid=%d\n",getppid()); pid=fork(); //wait(NULL); if(pid==0){ sleep(10); printf("cp_pid=%d\n",getppid()); } printf("this pid is %d\n",getpid()); exit(1); }
運行截圖:
linux
翻看到第八章後面發現了幾個bash指令,其中之一就是ps指令(用於打印出當前系統中的進程(包括殭屍進程));經過ps aux|grep 1503
和ps aux|grep 50171
獲得以下圖,其中每行的最後一個字段表明command,即執行者是誰,這樣就順藤摸瓜獲得了./Fork
的父進程是ID號爲50171的由bash執行的進程,因此理所應當在父進程終止後有由bash回收,而對於ID號爲1503的進程的執行者是/sbin/upstart
,這裏的/sbin/upstart
就是在書中提到的專門回收進程的「init」進程,但並非全部進程的祖先,這裏仍是回到ps指令獲得的信息來看,這裏是存在者名爲init的祖先進程的,即ID號爲1的進程,但此時的這個祖先進程不在執行全部的僵死進程的回收了,而將此功能賦予給了/sbin/upstart
創造出來的ID號爲1503的進程,由她來收集僵死進程。git
問題1:statistics運行時,總會出現xargs cat:因信號13而終止的錯誤,我嘗試把.c改爲.java,就沒有那樣的錯誤了,我百度但沒有關於信號13的解釋,我決定重讀statistics腳本;
安全
問題1的解決:bash
語句 | 含義 |
---|---|
find . -name "*.c" | 找到當前目錄下全部.c文件 |
xargs cat | 這裏的xargs至關於一個鏈接管道,將find找到的文件輸送到cat指令下,並執行 |
grep -v $ | grep -v指的是捕捉非-v後面的其餘內容,$指的是空行 |
wc -l | 統計文檔裏的行數 |
find . -name "*.c"
檢索了一遍全部.c文件,發現有個命名是這樣的mybash (復件).c
文件名存在一個空格,刪除該文件後以及其餘文件名有空格的文件後,從新運行statistics腳本,結果就正常了。
結對隊友20155303函數
這周有點感慨,就是linux其實提供了不少指令供咱們學習linux,與其只是去簡單的在C語言上作表面功夫,不如深刻學習一下linux裏的bash指令,每每會有事半功倍的效果。學習
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 15篇 | 400小時 | |
第一週 | 177/177 | 1/1 | 10/10 | |
第三週 | 308/485 | 2/2 | 12/22 | |
第五週 | 277/762 | 2/4 | 10/32 | |
第六週 | 567/1329 | 1/5 | 15/47 |
嘗試一下記錄「計劃學習時間」和「實際學習時間」,到期末看看能不能改進本身的計劃能力。這個工做學習中很重要,也頗有用。
耗時估計的公式
:Y=X+X/N ,Y=X-X/N,訓練次數多了,X、Y就接近了。測試
參考:軟件工程軟件的估計爲何這麼難,軟件工程 估計方法ui
計劃學習時間:XX小時
實際學習時間:XX小時
改進狀況:
(有空多看看現代軟件工程 課件
軟件工程師能力自我評價表)