c - 在调用 execve() 时,环境的各个方面基于什么保持?
问题描述
我知道这应该替换整个过程映像,但我也知道在调用-family 函数exec
之一时会保留文件描述符等某些内容。exec
环境的各个方面是在什么基础上受到呼吁的execve()
?
解决方案
来自execve(3)
:
在 execve() 期间保留所有进程属性,但以下情况除外:
任何被捕获的信号的配置都将重置为默认值 (signal(7))。
不保留任何备用信号堆栈 (sigaltstack(2))。
不保留内存映射 (mmap(2))。
附加的 System V 共享内存段被分离 (shmat(2))。
POSIX 共享内存区域未映射 (shm_open(3))。
打开的 POSIX 消息队列描述符被关闭 (mq_overview(7))。
任何打开的 POSIX 命名信号量都是关闭的 (sem_overview(7))。
不保留 POSIX 计时器 (timer_create(2))。
关闭任何打开的目录流 (opendir(3))。
不保留内存锁(mlock(2)、mlockall(2))。
不保留退出处理程序(atexit(3)、on_exit(3))。
浮点环境被重置为默认值(请参阅 fenv(3))。
POSIX 也规定了这一点(尽管被否定了):
新进程应至少从调用进程映像继承以下属性:
不错的价值(见 nice())
semadj 值(参见 semop())
进程 ID
父进程 ID
进程组 ID
会话成员
真实用户 ID
真实组 ID
补充组 ID
距离闹钟信号还剩的时间(参见alarm())
当前工作目录
根目录
文件模式创建掩码(参见 umask())
文件大小限制(参见 getrlimit() 和 setrlimit())
进程信号掩码(参见 pthread_sigmask())
待处理信号(参见 sigpending())
tms_utime、tms_stime、tms_cutime 和 tms_cstime(参见 times())
资源限制
控制终端
间隔计时器
新进程的初始线程应至少从调用线程继承以下属性:
信号掩码(参见 sigprocmask() 和 pthread_sigmask())
待处理信号(参见 sigpending())
本卷 POSIX.1-2017 中定义的所有其他过程属性应在新过程映像中从旧过程映像继承。本卷 POSIX.1-2017 中定义的所有其他线程属性应在新进程映像中的初始线程中从旧进程映像中的调用线程继承。本卷 POSIX.1-2017 未定义的进程或线程属性的继承是实现定义的。
推荐阅读
- python - 在字符串周围画一个简单的框
- sapui5 - 如何使用 UI5 诊断识别损坏的绑定
- java - MacOS Catalina 是否会剥离 zip 文件中的可执行文件权限?
- html - 有没有办法为列表样式图像添加边距或填充?
- swift - 快速生成 STL 缩略图
- javascript - Slick Slider 按类别过滤
- javascript - 如何在 JS 中剪切音频 mp3 Blob
- python - 将多列列表拆分为单独的行
- javascript - 为什么我在运行此函数时更改作为参数传递的变量的值?
- python - 路径问题:NameError: name '__file__' is not defined