1. 程式人生 > >java程序呼叫外部程式時fork()+exec()分析

java程序呼叫外部程式時fork()+exec()分析

java程序呼叫一個外部程式,一般使用Runtime.getRuntime().exec(cmd)的方式啟動。

以下是Runtime.getRuntime().exec(cmd) 的執行流程分析

分析SUN JDK 1.5 SRC,找到Runtime.getRuntime().exec(cmd)的執行流程:

java.lang.Runtime.exec(cmd);

--java.lang.ProcessBuilder.start();

----java.lang.ProcessImpl.start();

------Java_java_lang_UNIXProcess_forkAndExec() in j2se/src/solaris/native/java/lang/UNIXProcess_md.c

--------1). fork(); 2). execvp();

man fork知道,fork產生的子程序需要複製父程序在記憶體中的所有資料內容(程式碼段、資料段、堆疊段),由於全部複製開銷較大,因此Linux已經採用copy-on-write機制,即只是複製頁表,共享內容,在有改變的時候再去申請記憶體和複製資料。

參考: