想改善这个问题吗? Update the question,因此它是on-topic,用于堆栈溢出。
6个月前关闭。
我知道
exec
应该替换整个过程映像,但是我也知道在调用exec
-family函数之一时会保留诸如文件描述符之类的内容。调用
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的实现是实现定义的。
关于c - 在什么基础上调用execve()可以保持环境的各个方面? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57581393/