一道關於fork的面試題

2021-08-20 10:09:50 字數 724 閱讀 9157

#include 

#include

#include

int main()

使用gcc編譯,

4個程序, 這在我的一篇部落格有講

fork遇上for迴圈

已知其中乙個程序 列印結果是

pid1

:1002,pid2

:1003

求其他程序列印的結果(不考慮執行順序,程序id順序連續分配)

首先fork的返回值,父程序返回子程序pid,子程序返回0;

由於該程序返回的兩個結果都非0,所以可以肯定它是執行的老大程序,

它建立的兩個子程序分貝是 1002,1003;

那麼 1002 列印的結果呢? 他是老大的父程序,所以pid1返回0,同時它又建立了乙個新的程序,

那麼pid2應該返回其子id,由題意的子程序的id號是1004

1002 程序列印結果就是

(0,1004)

再考慮 1004 的列印結果,由於它父程序是1002,所以pid1可以由1002繼承過來,

所以 1003的列印結果是

(0,0)

最後1003的列印結果, 它是老大第二次fork的產物,所以pid1得通過老大程序獲得,

老大的pid1是 1002,同時它又是老大的子程序所以1003的返回結果是

(1001,0)

一道關於fork()的面試題

昨天師兄乙個朋友找外企工作,幫他做程式設計題,其中一道比較有意思,如下 問輸出什麼?為什麼?include include int main 這道題感覺很有意思,算是知識的綜合。考慮清楚了,卻挺簡單 1.fork 的理解 fork 是乙個程序建立函式,乙個程序呼叫fork 函式後,系統先給新的程序分...

從一道面試題開始說fork

自 http blog.csdn.net yuwenliang archive 2010 01 18 5209239.aspx 給出如下c程式,在linux下使用gcc編譯 1 include stdio.h 2 include sys types.h 3 include unistd.h 4 5 ...

一道面試題

一道面試題 射擊運動員10發打中90環有多少種可能,請編寫程式計算出來,並列印出結果,0環和10環均有效。打中90環就是沒打中10環,所以打中90環跟打中10環的可能性是一樣的。然後開始遞迴狂打槍,一到10就記錄 if params i 10 在迴圈的控制中已經排除了大於10的可能性 i 10 pa...