關於對殭屍程式的測試

2021-07-24 22:30:57 字數 1727 閱讀 5298

#include #include #include int main(int argc, const char *argv)

else if( pid == 0 )

printf("child is over!\n");

exit(0);

} else }

return 0;

}

編譯並執行此程式:

呼叫ps aux | grep a.out:

這是前五秒列印的結果:

linux@ubuntu:~/16071$ ps aux | grep a.out

linux 3411 0.0 0.0 1988 280 pts/3 s+ 16:42 0:00 ./a.out

linux 3412 0.0 0.0 1988 56 pts/3 s+ 16:42 0:00 ./a.out

linux 3414 0.0 0.1 4368 832 pts/4 s+ 16:42 0:00 grep --color=auto a.out

這是五秒後列印的結果:

linux@ubuntu:~/16071$ ps aux | grep a.out

linux 3411 0.0 0.0 1988 280 pts/3 s+ 16:42 0:00 ./a.out

linux 3412 0.0 0.0 0 0 pts/3 z+ 16:42 0:00 [a.out] linux 3421 0.0 0.1 4368 832 pts/4 s+ 16:42 0:00 grep --color=auto a.out

這是程式執行的結果:

linux@ubuntu:~/16071$ ./a.out

this is parent!

this is child

this is parent!

this is child

this is parent!

this is child

this is child

this is parent!

this is child

child is over!

this is parent!

this is parent!

this is parent!

this is parent!

如何避免殭屍程式?

百科中的解釋:

⒈父程序通過wait和waitpid等函式等待子程序結束,這會導致父程序掛起。

⒉ 如果父程序很忙,那麼可以用signal函式為sigchld安裝handler,因為子程序結束後, 父程序會收到該訊號,可以在handler中呼叫wait**。

⒊ 如果父程序不關心子程序什麼時候結束,那麼可以用signal(sigchld,sig_ign) 通知核心,自己對子程序的結束不感興趣,那麼子程序結束後,核心會**, 並不再給父程序傳送訊號。

⒋ 還有一些技巧,就是fork兩次,父程序fork乙個子程序,然後繼續工作,子程序fork一 個孫程序後退出,那麼孫程序被init接管,孫程序結束後,init會**。不過子程序的** 還要自己做。

個人認為方法2、3還是不錯的。

關於android程式的測試

測試的相關概念 根據測試是否知道源 黑盒測試 只關心程式執行的過程和結果。白盒測試 根據程式的源 寫測試方法或測試用例。根據測試的粒度 方法測試 function test 單元測試 unit test 整合測試 intergration test 根據測試的次數 冒煙測試 smoke test a...

關於殭屍程序的深度解析

1 while 1 表示乙個程序還在進行,如果如果不加則表示程序已經結束,因為程序是乙個程式在執行過程的例項,因為a.out加上在終端上顯示完成後就表示已經結束了。如果在子程序上加上while 1 則表示程序子程序在進行中,而父程序結束,如果此時父程序沒有對孩子程序作任何處理的話,就變成我們所謂的殭...

觀察程式的狀態,殭屍程序

利用靜態的 ps 或者是動態的 top,還能以 pstree 來查閱程式樹之間的關係 root www ps aux 觀察系統所有的程式資料 root www ps la 也是能夠觀察所有系統的資料 root www ps axjf 連同部分程式樹狀態直接背兩個比較不同的選項,乙個是只能查閱自己 b...