进程终止,环境表和环境变量操作
Posted hkui
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程终止,环境表和环境变量操作相关的知识,希望对你有一定的参考价值。
进程ID:
每个linux进程都一定有一个唯一的数字标识符,称为进程ID(总是一个非负整数)
进程终止:
正常终止:
1.从Main返回(return)
2.调用exit (标准库)
3.调用_exit或_Exit (内核提供)
4.最后一个线程从启动例程返回
5.最后一个线程调用pthread_exit
异常终止:
调用abort(信号相关)
接收到一个信号并终止(信号相关)
最后一个线程对取消请求做相应
exit与_exit() 区别 是否刷新缓存区
flush I/O
atexit 函数
exit:先刷新缓存区,然后结束进程 ,在结束之前调用信号注册函数atexit
_exit:不刷新缓存区 直接从进程退出,由内核直接结束进程 没经过atexit
exit.c
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <errno.h> int main(int argc,char *argv[]){ if(argc<3){ fprintf(stderr, "usage:%s file return|exit|_exit ", argv[0]); exit(1); } FILE *fp=fopen(argv[1],"w"); //双 引号 char *str = "hellophp"; fprintf(fp, "%s",str ); if(!strcmp(argv[2],"return")){ return 0; }else if(!strcmp(argv[2],"exit")){ exit(0); }else if(!strcmp(argv[2],"_exit")){ _exit(0); }else{ printf("process error "); } return 0; }
运行结果
[[email protected] exit]# ./a.out exit.txt exit [[email protected] exit]# ./a.out _exit.txt _exit [[email protected] exit]# ./a.out return.txt return [[email protected] exit]# more *.txt :::::::::::::: _exit.txt :::::::::::::: :::::::::::::: exit.txt :::::::::::::: hellophp :::::::::::::: return.txt :::::::::::::: hellophp
进程的环境表
获取当前进程的环境表
1.通过别的地方定义的 引入过来
extern char **environ
2.通过main的第三个参数
进程中环境表操作
#include <stdio.h>
char *getenv(const char *name)
返回:指向与name关联的value指针,若未找到则返回NULL
#include <std;ib.h>
int putenv(char *str);
int setenv(const char *name,const char *value,int rewrite); //1非0表示覆盖
int unsetenv(const char *name);
返回:成功返回0,出错返回非0
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> extern char **environ; void showenv(char **env){ int i=0; char *str; while ((str =env[i]) != NULL){ printf("%s ",str ); i++; } } int main(int argc,char *argv[],char *envp[]){ printf("envrison=%p,envp=%p ",environ,envp );//2个变量地址值一样的 //showenv(environ); //printf("------- "); //showenv(envp); printf("---------------------------- "); char *oldpath=getenv("PATH"); char *addpath=":/tmp/hkui"; int newlen=strlen(oldpath)+1+strlen(addpath)+1; printf("newlen=%d ",newlen ); char newpath[newlen]; strcpy(newpath,oldpath); strcat(newpath,addpath); printf("oldpath:%s ",oldpath); setenv("PATH",newpath,1); printf("newpath:%s ",getenv("PATH")); putenv("NAME=HKUI2018"); printf("NAME:%s ",getenv("NAME")); return 0; }
以上是关于进程终止,环境表和环境变量操作的主要内容,如果未能解决你的问题,请参考以下文章