码迷,mamicode.com
首页 > 系统相关 > 详细

进程终止,环境表和环境变量操作

时间:2018-07-15 11:15:58      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:操作   div   while   整数   file   read   启动   引入   ret   

进程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\n", 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\n");
    }
    return 0;
}

运行结果

[root@centos1 exit]# ./a.out exit.txt exit
[root@centos1 exit]# ./a.out _exit.txt _exit
[root@centos1 exit]# ./a.out return.txt return
[root@centos1 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\n",str );
        i++;

    }
}
int main(int argc,char *argv[],char *envp[]){
    printf("envrison=%p,envp=%p\n",environ,envp );//2个变量地址值一样的
    //showenv(environ);
    //printf("-------\n");
    //showenv(envp);
    printf("----------------------------\n");
    char *oldpath=getenv("PATH");
    char *addpath=":/tmp/hkui";
    int newlen=strlen(oldpath)+1+strlen(addpath)+1;
    printf("newlen=%d\n",newlen );
    char newpath[newlen];
    strcpy(newpath,oldpath);
    strcat(newpath,addpath);


    printf("oldpath:%s\n",oldpath);
    setenv("PATH",newpath,1);
    printf("newpath:%s\n",getenv("PATH"));
    putenv("NAME=HKUI2018");
    printf("NAME:%s\n",getenv("NAME"));


    return 0;
}

 

进程终止,环境表和环境变量操作

标签:操作   div   while   整数   file   read   启动   引入   ret   

原文地址:https://www.cnblogs.com/HKUI/p/9311893.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!