⑴ 在linux系統下實現對system() 函數對fork() ,exec(),waitpid()函數的調用。求大神解答
不知道你這實現這些函數的調用是什麼意思,是要重寫這些介面嗎?還是舉個例子說明?
我解釋一下吧:
(1)system()其實就是對fork()和exec()函數族等的封裝。
(2)fork()是用來產生子進程的,是現在我知道的唯一一個返回兩個值的函數(有過有另外的,麻煩網友指出),返回-1表示執行失敗;否則返回大於0的值時,表示是子進程的進程號,返回0時,表示父進程創建子進程成功。
(3)exec()不是一個函數,是函數族,有execl(),execv(),execle(),execve(),execlp(),execvp(),它們常用於子進程中「脫胎換骨」,就是父進程創建子進程後,子進程幾乎是父進程的拷貝(只有很少的東西不一樣,如進程號(PID)等),然後子進程調用exec()函數族執行其他的程序,即將原來進程的東西全部清除掉,稱為一個嶄新的進程,所以叫「脫胎換骨」。
(4)waitpid()是用在父進程中等待進程退出的,如果父進程不調用這個介面,那麼它有可能先於子進程退出,那麼子進程就會稱為孤兒進程,繼而被init進程(PID為1的進程,Linux啟動後第一個啟動的進程)收養。或者父進程並未退出,也未調用這個介面,但是子進程已經執行完成,那麼子進程就會成為一個僵屍進程。
具體例子在網上找找吧,都不是很難。