12.进程的映像更新

2020-04-12  本文已影响0人  陈忠俊

1.读取系统的环境变量

#include<stdio.h>
#include<unistd.h>
extern char **environ; //变量的声明,只是作用域的扩充

int main(void){
    int i;
    for(i = 0; environ[i] != NULL; i++)
        printf("%s\n", environ[i]);
}
#include<stdio.h>
#include<unistd.h>
//extern char **environ; //变量的声明,只是作用域的扩充

int main(int argc, char *argv[], char *exevp[]){
    int i;
    for(i = 0; exevp[1] != NULL; i++)
        printf("%s\n", exevp[i]);
    return 0;
}

调用exec*执行映像的更新

#include<stdio.h>
#include<unistd.h>
#include<sys/wait.h>
#include<sys/types.h>
#include<stdlib.h>


int main(void){
    char *ps_argv[] = {"ps", "-o", "pid,ppid,pgrp,comm", NULL};
    pid_t pid = fork();
    if(pid == -1) return -1;
    if(pid == 0){
        printf("child process... %d\n", getpid());
        //更新进程的映像
        //execl("/bin/ps", "ps", "-o", "pid, ppid, pgrp, comm", NULL);
        execvp("ps", ps_argv);
        //只有当exec函数家族的函数执行失败,才执行以下代码
        perror("execlp");
        exit(0);
    }
    else {
        wait(NULL);
    }
    return 0;
}
#include<stdio.h>
#include<unistd.h>
#include<sys/wait.h>
#include<sys/types.h>
#include<stdlib.h>
extern char **environ;

int main(void){
    char *ps_envp[] = {"name=eclipse", "location=shanghai", NULL};
    pid_t pid = fork();
    if(pid == -1) return -1;
    if(pid == 0){
        printf("child process... %d\n", getpid());
        //更新进程的映像
        //execl("/bin/ps", "ps", "-o", "pid, ppid, pgrp, comm", NULL);
        execle("./execl", execl, NULL, ps_envp);
        //只有当exec函数家族的函数执行失败,才执行以下代码
        perror("execlp");
        exit(0);
    }
    else {
        wait(NULL);
    }
    return 0;
}
上一篇 下一篇

猜你喜欢

热点阅读