问题描述
- 关于fork子进程环境的问题
-
场景描述:用户进程(进程A, 用户A, 普通用户) ---> 发送作业请求
---> 服务进程(进程B, root用户) ---> 服务进程fork + exec,
父进程返回消息循环, 子进程运行作业装载和执行程序(进程C, root用户)
需求:
显然, 进程A发起一个作业请求,就会导致进程Bfork出一个子进程C来运行作业,
由于子进程对父进程环境的继承, 进程C的环境与进程B相同, 而现在需要进程C的环境与进程A相同, 至少是与用户参数相关的环境, 比如$USER $HOME等.
我想请教一下, 现在作业请求消息里只有请求者的用户名, 例如user,
如果不考虑把A的环境表封装在作业请求消息里发送给B, 进而由B装载给C的办法,
有没有可以避免发送消息, 而是仅根据用户名user, 在本地获得一份user的环境信息以装载给C的办法(注: A和B,C可能运行在不同的主机上, 但是每个主机都有所有用户的信息)
解决方案
fork()子进程与父进程之间的文件描述符问题
fork子进程时和父进程之间的文件描述符的问题
fork产生僵死子进程的问题
解决方案二:
setuid()可以更改用户id,降低进程的权限为用户user
时间: 2024-08-30 17:43:38