linux環境變量

1.Linux的變量種類  

按變量的生存週期來劃分,Linux變量可分爲兩類:

  1.1 永久的:添加到/etc/profile,變量永久生效。
          例:export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"

  1.2 臨時的:使用export命令聲明即可,變量在關閉shell時失效。
          例:在當前shell輸入   export PATH=/usr/local/sbin

 2.程序中使用環境變量
    
2.1   函數getenv 獲取環境變量
    
2.2   函數setenv,putenv 設置環境變量 
    
2.3   函數unsetenv取消
環境變量 
    注意:當起進程A時,此時進程A會繼承當前環境變量的值(也就是說,
進程A 執行前,環境變量USER=X,進程A 執行起來後,你即使在shell  export USER=Y,進程A 中USER的值還是X),但是進程A可以通過 setenv來修改環境變量的值(setenv設置的環境變量只在本進程和子進程有效),
來達到進程A的需求。


當進程A fork 子進程B時,同理,子進程會優先繼承父進程的環境變量 。


例:#A.c

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <sys/prctl.h>

int createProcess(char* path)
{
	int pid = fork();
	if(pid == -1)
	{
		printf("fork failed\n");
		return -1;
	}
	else if(pid == 0)
	{
		int currentPid = getpid();
		prctl(PR_SET_PDEATHSIG, SIGTERM);
		setpgid(currentPid, currentPid);
		int ret = execl(path, path, NULL);
		if(ret < 0)
		{
			printf("execl failed\n");
		}
	}
	return pid;
}

int main(int argc,char ** argv)
{
	printf("1 father USER:%s\n",getenv("USER"));
	setenv("USER","ROOT1",1);
	printf("2 father USER:%s\n",getenv("USER"));
	createProcess("B");
	sleep(5);
	return 1;
}



#B.c

#include <stdio.h> 
#include <stdlib.h> 

int main(int argc,char ** argv) 
{ 
	printf("child USER:%s\n",getenv("USER")); 
	return 1; 
}







編譯後運行: 


發佈了32 篇原創文章 · 獲贊 6 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章