UNIX 下C編程 筆記

疑問解決:
    關於fork
        程序1.printf函數後接fork,如果printf裏沒有\n,那麼在終端會輸出兩次printf的內容,第二個是子進程輸出的,fork後面是否有puts或者printf都不會影響?
程序2.用fork來克隆進程後,讓各自的進程輸出後sleep1秒,爲的是顯示得更明白。如果吧sleep(1)註釋掉,那兩個進程至少各循環100來次,輸出上的差別才比較明顯。
程序3.用fork交替向文件寫入aAbBcC……,小寫和大寫字母,fork之後,父進程裏fork的返回值與子進程裏的返回值不一樣。可以做爲區分兩個進程的依據,父進程每隔1秒依次寫入a、b……子進程每隔1秒一次寫入A、B、C
程序4.fork並不是單純的克隆進程後繼續執行。它同時把前面父進程的運行結果或者狀態也克隆了,這個不能忽視。fork之前使用兩個atexit就可以更深刻的體會這點了。
程序5.fork克隆進程後,在子進程裏execv一個可執行文件後,該文件會完全覆蓋掉子進程。而沒有另加其他代碼的父進程運行玩就結束。fork前父進程(這時候還沒有產生子進程)輸出“begin”,fork父進程(fork執行後)中輸出“end”。子進程中輸出日曆(execv覆蓋掉了子進程),這個代碼很好的體系那了父子進程互相獨立完成任務和execv的覆蓋性。顯示玩日曆後,沒有顯示提示符,但shell仍可以正常接受命令並執行。




如果創建多個進程呢?
現在想到了一個辦法,就是在使用fork克隆進程後,通過一個判斷入口來再次fork(用等於來判斷是否是最初的父進程,如果是,就在這個進程裏再次fork)如此這樣,生成的子進程都只有一個共同的父進程。(這個有待驗證。)
發佈了20 篇原創文章 · 獲贊 3 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章