linux下使用clone建立程序

2021-10-09 06:02:59 字數 1465 閱讀 7797

1.1、函式原型

int clone(int (*fn)(void *), void *child_stack, int flags, void *arg, ... /* pid_t *ptid, struct user_desc *tls, pid_t *ctid */ );
標頭檔案:

#define _gnu_source

#include

函式作用:clone函式允許使用者指定子程序繼承或者拷貝父程序的某些特定資源,如訊號量、檔案描述符、檔案系統、記憶體等內容。

函式引數:

1)fn 新建立程序的入口函式;

2)clid_stack 子程序棧空間的起始位址;

3)arg 傳遞給子程序的引數,需要和clone_settls一起使用

4)ptid 儲存父程序的pid,需要和clone_parent_settid一起使用

5)tls (thread local storage) descriptor,需要和clone_settls一起使用

6)ctid 儲存子程序的pid,需要和clone_child_settid選項一起使用

3)flag 建立程序的屬性

返回值:

成功返回子程序的id號,失敗返回-1.

1.2、flag各引數的含義和用法,這裡只介紹了部分引數的含義,其它引數的含義請參考clone(2)

1)clone允許新建立的程序共享呼叫它的程序(通常是父程序)的部分資源,比如記憶體空間、檔案描述符表、訊號量等,具體需要共享那些內容可以通過clone的flag引數設定;

2)fork函式建立的子程序可以看做是父程序的完全拷貝,而clone則是有選擇性的拷貝;

#define _gnu_source //注意,這個巨集必須在最前面,否則編譯會報錯

#include #include #include #include #include #include int value = 0;

int child_progress(void *arg)

return 0;

}void main(int argc,char *ar**)

//子程序繼承父程序的資料空間/在子程序結束後執行/將子程序的id儲存到tid變數中

int mask = clone_vm|clone_vfork|clone_child_settid;

ret = clone(child_progress,stack+4096,mask,null,null,null,&tid);//棧位址向下增長,因此起始位址為stack+4096

if(ret < 0)

printf("clone sucess,pid:%d %d\r\n",ret,tid);

while(1)

}

執行結果:

Linux下建立 銷毀 使用 SWAP

建立swap檔案方法1 建立乙個足夠大的檔案dd if dev zero of localdisk swapfile bs 1024 count 4096000 count的值等於1024 x 你想要的檔案大小,4096000是4g 2 把這個檔案變成swap檔案.mkswap localdisk ...

linux程序和執行緒的clone 建立。和執行緒排程

b linux下程序和執行緒的建立都是通過clone實現的.clone函式功能強大,帶了眾多引數,clone可以讓你有選擇性的繼承父程序的資源,你可以選擇想vfork一樣和父程序 共享乙個虛存空間,從而創造的是執行緒,你也可以不和父程序共享,你甚至可以選 擇創造出來的程序和父程序不再是父子關係,而是...

clone 物件的使用

當 person p1 p 執行之後,是建立了乙個新的物件嗎?首先看列印結果 可以看出,列印的位址值是相同的,既然位址都是相同的,那麼肯定是同乙個物件。p 和 p1 只是引用而已,他們 都指向了乙個相同的物件 person 23,zhang 可以把這種現象叫做引用的複製。上面 執行完成之後,內 存中...