赞
踩
一般来讲,进程定义为正在运行的程序的实例,简单地说,进程就是一个正在运行的程序。
==程序== (program):通常为二进制,放置在储存媒体中 (如硬盘、光盘、软盘、磁带等), 为实体文件的型态存在;
==进程== (process):程序被触发后,运行者的权限与属性、程序的程序码与所需数据等都会被加载内存中, 操作系统并给予这个内存内的单元一个识别码 (PID),可以说,进程就是一个正在运行中的程序。
进程不仅仅包含了正在运行的代码,还包括了运行代码所需要的各种资源。内核中使用进程控制块PCB(process control block)管理一个进程的数据结构,每个进程都有一个PCB。
进程是资源所有资源分配的基本单位,线程则是CPU调度的基本单位。
在一个cpu上,可以存在多个进程,但是同一个时间段内,只能有一个进程工作。操作系统使用一定的算法管理所有进程,使得看起开像是并发执行,称之为“伪并发”;多核CPU可以实现真正意义上的并发。
1、环境变量
(1)、命令行使用export查看本机支持的环境变量的名称和内容
(2)在程序中获取环境变量
每个进程都有一个环境表,存储当前进程的环境变量。每个环境变量由“name=value”这样的字符串组成。
进程环境表其实是一个字符串数组,用environ变量指向它。 每一个环境变量都是一个字符串,所有的环境变量构成字符串数组。环境表的内存布局:
我们可以将所有的环境表中的变量打印出来:
- #include <stdio.h>
-
- int main(void)
- {
- extern char **environ; // 不用定义,声明就能用 二重指针
- int i = 0;
-
- while (NULL != environ[i])
- {
- printf("%s\n", environ[i]);
- i++;
- }
-
- return 0;
- }
此外,操作系统还给我们提供了相关API,来帮助我们获得与修改环境变量:
char * getenv(const char *name)--该函数用来获取名字为name的环境变量值,不存在时返回NULL。
int putenv(const char * string)--该函数用来改变或增加环境变量的内容。参数string的格式为“name=value”,如果该环境变量已经存在则会覆盖。
int setenv(const char *name, const char * value,int overwrite)--该函数用来改变或增加环境变量的内容。根据参数overwrite看是否覆盖。
int unsetenv(const char *name)--清除某个环境变量。
举例:
- #include <stdio.h>
- #include <stdlib.h>
-
- int main(void)
- {
- char *env_path = "PATH";//想要寻找的环境变量
- char *env_value = NULL;//存储环境变量的值
-
- env_value = getenv(env_path);
-
- if(NULL==env_value)
- {
- printf("not founf!\r\n");
- }
-
- printf("env_value:%s\r\n",env_value);
-
- return 0;
- }
2、进程自身属性
一个进程除了能获得操作系统提供的环境变量之外,还具备自身的属性,主要包括:
(1)、命令行使用PS查看进程号
ps -aux查看所有进程
(2)在程序中获取进程号
#include <sys/types.h>
#include <unistd.h>
- #include <stdio.h>
- #include <sys/types.h>
- #include <unistd.h>
-
- int main(void)
- {
- pid_t p1 = -1, p2 = -1;
-
- p1 = getpid();
- printf("pid = %d.\n", p1);
- p2 = getppid();
- printf("parent id = %d.\n", p2);
-
- return 0;
- }
REF:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。