一个关于进程和线程的问题

tgvlcw 2012-03-10 01:17:12
有一个进程,其中创建了3个线程,然后该进程用exec函数运行了其它进程,那么原进程中的线程的资源系统会回收吗?比如说:打开的文件 描述符,内存等?
...全文
163 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
justkk 2012-03-11
  • 打赏
  • 举报
回复
exec之后,感觉原进程通过malloc()申请的内存会释放,在新进程中不再可用
tgvlcw 2012-03-11
  • 打赏
  • 举报
回复
fcntl(enable_fp, F_SETFD, FD_CLOEXEC);
使用这个函数就可以实现了。

还有几个问题:
1,在A进程中创建了3个线程,这是A进程使用exec去执行其它程序之后,那么A进程中的3个线程是怎么处理的呢?
2,在A进程中的线程a中打开了一个文件,并且使用F_DUPFD_CLOEXEC设置文件描述符,然后进程A用exec去执行其它进程之后,怎么在其它进程中使用这个描述符呢?
nossiac 2012-03-10
  • 打赏
  • 举报
回复
程中的线程的资源系统会回收吗?比如说:打开的文件 描述符,内存等?

不会。
新进程在fork的时候复制了原进程环境,并且是copy on write的。
到你exec时,新进程会执行另一个程序,与原进程分道扬镳了。
quwei197874 2012-03-10
  • 打赏
  • 举报
回复
不会的
jsy5211 2012-03-10
  • 打赏
  • 举报
回复
当进程调用exec函数执行一个程序时,该进程执行的程序完全替换为新程序,而新程序则从其main函数开始执行。因为调用exec并不创建新进程,所以前后的进程id并未改变。exec只是用全新的程序替换了当前进程的正文、数据、堆和栈。对于文件描述符都有个执行时关闭标记,如果打开文件时设置过,则执行exec时,该文件会自动关闭,否则此描述符还继续打开,除非通过fcntl设置该标记,否则系统默认是在执行exec后仍保持打开。具体可参考unix环境高级编程

4,465

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧