c语言-关于fork子进程环境的问题

问题描述

关于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

c语言-关于fork子进程环境的问题的相关文章

Linux下C语言的fork()子进程函数用法及相关问题解析_C 语言

forkfork()函数是linux下的一个系统调用,它的作用是产生一个子进程,子进程是当前进程的一个副本,它跟父进程有一样的虚存内容,但也有一些不同点. 但是,值得注意的是,父进程调用fork()后,fork()返回的是生成的子进程(如果能顺利生成的话)的ID.子进程执行的起点也是代码中fork的位置,不同的是下面这段C语言代码展示了fork()函数的使用方法: // myfork.c #include <unistd.h> #include <stdio.h> int main

vala windows-VALA语言能在WINDOWS环境下编写吗?

问题描述 VALA语言能在WINDOWS环境下编写吗? VALA是Linux的语言,最近在查是否VALA语言能用在Window下,可以不借助其他Linux的工具把Windows转换为Linux,然后编写VALA吗?就是直接能在Windows下应用吗>?

dpdk-如何在DPDK中使用fork子进程的方式将DPDK配置到多个核上去

问题描述 如何在DPDK中使用fork子进程的方式将DPDK配置到多个核上去 在l2fwd中的演示程序里,将DPDK配置到两个核上,提高收发包的效率,这样可以吗,请教一下如何去做,谢谢谢,望了解的即时告诉我,谢谢谢!!急! 有可能我没有吧问题说明白,请在下留言,我会即时联系您! 解决方案 http://www.cnblogs.com/zzqcn/p/4024205.html

刚学习.net,应该学习哪种语言?使用什么环境好??软件用什么???

问题描述 刚学习.net,应该学习哪种语言?使用什么环境好??软件用什么??? 解决方案 解决方案二:熟悉哪种就用哪种.vb或者c#.vs2008.解决方案三:我想用c#编解决方案四:VisualStudio.NET2003这个软件可不可以??解决方案五:什么的软件容易上手点,有人回答我吗??解决方案六:要用就用最新的.现在是VisualStudio2008.解决方案七:同1楼,熟悉什么就用什么.解决方案八:刚开始可以用VS2003,然后2005..至于2008,感觉现在还不太成熟...解决方案

Linux中使用C语言的fork()函数创建子进程的实例教程_C 语言

一.fork入门知识一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事. 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间.然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同.相当于克隆了一个自己.   我们来看一个例子: #include <unistd.h> #include &l

C语言的fork函数在Linux中的进程操作及相关面试题讲解_C 语言

fork的意义 下图为,C 程序的存储空间布局(典型) 1.一个现有进程可以调用 fork 函数创建一个新进程. 2.fork 函数被调用一次,但返回两次, 两次返回的唯一区别是子进程的返回值是 0, 而父进程的返回值是新子进程的 PID. 3.子进程和父进程继续执行 fork 调用之后的指令. 在上图的存储空间布局中,父子进程只共享正文段,其余的都各自有独立的副本 (通常使用 copy-on-write 的策略,速度比较快). fork 的两种用法 1.父子进程同时执行不同的代码段典型应用:W

教你如何使用离线语言包进行特殊环境下的应用与安装

上一篇指导您如何获取来自于微软Update的原版语言包,而本篇介绍的是如何应用下载回来的语言包. 对于多语种的环境下,语言包可以帮不少忙,现在通过图示的方式指导您如何应用这些离线的语言包,使得您应用起来更加方便. I. GUI,图形操作 a) Figure 1运行内输入lpksetup b) Figure 2选择安装显示语言 c) Figure 3浏览您之前下载好的文件路径,程序会自动遍历,呈现出符合规则的语言包

Go语言的Windows下环境配置以及简单的程序结构讲解_Golang

本地环境设置在这里我们介绍设置Go编程语言环境,需要在你的计算机上的准备以下两个软件,(A)文本编辑器和(B)Go编译器. 文本编辑器这将用来键入程序.一些编辑器的例子包括Windows记事本,OS编辑命令,简,Brief, Epsilon, EMACS和VIM或vi. 文本编辑器名称和版本在不同的操作系统可能不太一样.例如,记事本将用于Windows:VIM或vi可以在Windows以及Linux或UNIX上使用. 编辑器创建的文件称为源文件和包含程序源代码.对于围棋程序的源文件通常命名扩展为

ubuntu下搭建Go语言(golang)环境_Golang

Go语言是谷歌2009发布的第二款开源编程语言.Go语言专门针对 多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全.支持并行进程. 还是我自己的电脑,我自己安装的是ubuntu 12.04版本的,直接介绍安装吧!其实搭建环境很简单! 复制代码 代码如下: sudo apt-get install python-setuptools python-dev build-essential //安装mercurial依赖 sudo easy_insta