Linux服务器编程——Linux系统编程之进程

进程的基本概念

参考小何讲进程

环境变量

Linux是多任务多用户的开源操作系统。环境变量:操作系统中用来制定操作系统运行环境的一些参数。通常具有以下特征:

1、字符串

2、统一的格式  名=值[;值]

3、用来描述进程环境信息

常见的环境变量

PATH:可执行文件的路径

              输出方式  echo $PATH

SHELL:记录当前目录解析器

HOME:当前home目录

LANG:语言

TERM:终端类型

注意:要在C语言程序中使用环境变量,必须extern char **environ;

环境变量操作函数

getenv函数
作用:获取环境变量值
头文件
#include 

函数原型
char* getenv(const char* name)
char* secure_getenv(const char* name)  _GNU_SOURCE

setenv函数
作用:设置或添加环境变量值 
头文件
#include 

函数原型
int setenv(const char* name,const char* value, int overwrite)
overwrite:
          非0  改变
           0   不改变
int unsetenv(const char* name)


进程控制

fork函数
作用:创建子进程
头文件
#include 

函数原型
pid_t fork(void)

返回值:
1、返回子进程ID >0  (父进程)
2、0   创建成功    (子进程)

getpid/getppid函数
作用:得到当前进程的ID号
头文件
#include 
#include 

函数模型
pid_t getpid(void)
pid_t getppid(void)

注意:父子进程之间共享的只有文件描述符与mmap建立的映射区

exec函数族
调用exec函数不会创建新进程。
int execl(const char* path, const char* arg,...)
作用:加载一个进程,通过路径名
path:路径
arg:参数

int execlp(const char* file, const char* arg,...)
作用:加载一个进程,借助PAYH环境变量,通常用来执行系统命令如ls,cat
返回值:-1,失败;
        无返回,成功
参数file:要加载的程序的名字
参数arg:argv[0]程序名
最后一定要加 NULL 参数

int execle(const char* path, const char* arg,...,char* const envp[])
需使用环境变量
int execv(const char* path, char * const argv[])
int execvp(const char* file,char* const argv[])
int execve(const char * path, char* const envp[])

回收子进程

孤儿进程:父进程先于子进程结束,则子进程成为孤儿进程,子进程的父进程成为init进程,称为init进程领养孤儿进程

僵尸进程:进程终止,父进程尚未回收,子进程残留资源放于内核,变成僵尸进程。不能用kill终止僵尸进程。

wait函数
作用
1、阻塞等待子进程退出
2、回收子进程残留资源
3、获取子进程结束状态

头文件
#include 
#include 

函数原型
pid_t wait(int *status);
status:传入参数,保存子进程的退出状态
       1、WIFEXITED(status)    非0      进程正常结束
          WEXITSTATUS(status)   获取进程退出状态
       2、WIFSIGNALED(status)   非0     进程异常终止
          WTERMSIG(status)   取得使进程终止那个信号的编号
       3、WIFSTOPPED(status)     非0     进程处于暂停状态
          WSTOPSIG(status)   取得使进程暂停的那个信号的编号
          WIFCONTINUED(status)   真   进程暂停后已经继续执行
返回值:>0    清理掉的子进程ID
        -1    失败

pid_t waitpid(pid_t pid, int* status ,int options)
作用:同wait 但可以指定pid进程清理,可以不阻塞
pid:
    >0   回收指定进程
    -1   回收所有进程      相当于wait 
     0   回收和调用waitpid一个组的所有子进程
    <-1  回收指定进程组内的任一子进程
返回0:参数3为WNOHANG,且子进程正在运行


你可能感兴趣的:(Linux服务器编程,C++,linux,服务器,编程)