; char *string; 说明:参数string指向一个字符串,格式如下:
name=value
本系统调用将环境变量name等于值value,修改或增加一个环境变
量,字符串string成为环境的一部分.
返回值:若putenv()不能取得合适的内存空间则返回非0值,否则返回0.
例子:/*父进程处理*/
putenv("HOME=/home/abcdef");
putenv("PATH=/bin");
if (fork()>0)
exit(0); /*父进程退出运行*/
/*子进程处理*/
setpgrp();
/*父进程设置的环境变量已传到子进程*/
char * value1;
value1=getenv("HOME");
value2=getenv("PATH");
printf("HOME=[%s],PATH=[%s]\n",value1,value2);
/*将打印出"HOME=/home/abcdef"和"PATH=/bin"*/
三.多进程编程(www.cppentry.com)技巧
1.主要程序结构
(1)事件主控方式
若是应用程序属于事务处理方式,则在主函数中设计为监控事件发生,
当事件发生时,可以生成一个新的进程来处理该事务,事务处理完成后就
可以让子进程退出系统.这种处理方式一般不要消息传递.
(2)信息协调方式
若是应用程序需要由多个进程协调处理完成,则可以生成这些进程,
通过消息在进程间的传递,使各个进程能相互协调,共同完成事务.这种处
理方式一般是用fork()生成几个进程后,用exec()调用其它程序文件,使
得不同的程序同时在系统内运行.然后通过IPC机制传送消息,使各个程序
能协调运行.
2.选择主体分叉点
(1)事件初始产生
对应于事件主控方式的程序结构.关键点在于以何种方式选择事件的
初始发生点,如网络程序给出的建链信息.主控程序在收到该消息后就认
为是一个事件开始,则可以产生一个子进程处理后面的事务:接收交易信
息,事务处理,发送返回交易信息,关闭链接等,完成后将子进程退出系统.
(2)主程序自主产生
对应于信息协调方式的程序结构.主控程序只负责生成几个子进程,各
个子进程分别调用exec()将不同的执行文件调入内存运行,主控程序在生
成所有的子进程后即可退出系统,将子进程留在内存中运行.
3.进程间关系处理
(1)父子进程关系
. 进程组处理
进程组的概念是这样的,当系统启动时,第一个进程是init,其进程
组号等于进程号,由它产生的所有子进程的进程组号也相同,子进程
的子进程也继承该进程组号,这样,由init所生成的所有子进程都属
于同一个进程组.但是,同一个进程组的父子进程可能在信号上有相
互通讯,若父进程先于子进程退出系统,则子进程会成为一个孤儿进
程,可能变成僵死进程.从而使该子进程在其不"愿意"的情况下退出
运行.为解决这个问题,子进程可以自己组成一个新的进程组,即调
用setpgrp()与原进程组脱离关系,产生一个新的进程组,进程组号
与它的进程号相同.这样,父进程退出运行后就不会影响子进程的当
前运行.
. 子进程信号处理
但是,单做上述处理还不能解决另一个困难,即子进程在退出运行
时,找不到其父进程(父进程已退出,子进程的父进程号改为1).发送
&