PTT
Submit
Submit
選擇語言
正體中文
简体中文
PTT
C_and_CPP
[問題] 請教fork/exec關於memory release
作者:
Keitaro
(動き出す時間...)
2020-10-14 18:04:02
開發平台(Platform): (Ex: Win10, Linux, ...)
Linux
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
gcc
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
無
問題(Question):
請教各位 假設我要在linux底下執行CreateProcess的動作
如底下程式碼所示
如果fork產生的child process在exec之前還是跑從
parent process拷貝而來的程式碼
exec之後就跑要執行的程式了
child process應該也有new了一份char array
那為何child process不需要delete[] p呢?
我這個char array是要傳給exec的參數(把p_sArg/p_sEnv做處理然後傳送)
在底下的example就省略parser argument的部分
只用個p示意而已
感謝各位先進的指導
程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔)
example:
void CreateProcess(char* p_sAppName, char* p_sArg, char* p_sEnv)
{
char *p = new char[10];
int pid = fork();
......
......
if (pid == 0)
{
exec(...);
}
else if (pid > 0)
{
waitpid(pid , 0, 0);
}
else
{
printf("error");
}
delete[] p;
}
作者:
b0920075
(Void)
2020-10-14 19:09:00
kernel 會幫你處理好,沒差,反正等等execve 就會把記憶體內容洗成新的 process 要用的
作者:
ucrxzero
(RX-0)
2020-10-15 10:34:00
https://stackoverflow.com/questions/23440132/fork-a
fter-malloc-in-parent-does-the-child-process-need-to-free-it/23440176這篇說exec要 execvp不用
作者:
LPH66
(-6.2598534e+18f)
2020-10-15 10:48:00
樓上應該漏看了敘述, 他是說如果沒有呼叫 exec* 系列函數的話那就需要, 而如果呼叫了 exec* 系列 (如 execvp) 就免(exec* 系列底層都會歸到 execve 系統呼叫所以可以一起看)
繼續閱讀
[問題] -fPIC代表VM共享庫段映射到同一段PM?
ucrxzero
[問題] Graphviz 在 hackmd 使用上小問題
mickey94378
[問題] C address返回後被改變了(已解決)
simon860730
Re: [討論] C++ 讀取資料後如何抓取目標值?
loveme00835
[問題] UDP傳輸問題
peng0116
[討論] C++ 讀取資料後如何抓取目標值?
forthcoming5
[問題] 求檔 C言教學手冊第四版光碟 洪維恩
wizard6636
[問題] vector如何包成dll傳給C#調用
su27
Re: [問題] 版本字串比較
gn00618777
Re: [問題] cpp的function pointer傳遞
tinlans
Links
booklink
Contact Us: admin [ a t ] ucptt.com