四、进程操作

  1. 创建、结束进程
    创建进程使用fork系统调用,结束进程使用exit。理解fork调用的意义,理解vfork调用的意义
    #include<stdio.h>
    #include<fcntl.h>
    #include<sys/uio.h>
    #include<sys/stat.h>
    #include<sys/types.h>
    #include<unistd.h>
    #include<string.h>
    #include<sys/wait.h>
    #include<stdlib.h>
    int main(){
        pid_t chpid;
        int fd;
        char buf[50];
        int status;
        if((fd=open("temp", O_CREAT | O_RDWR | O_TRUNC, 0664)) == -1){
            perror("创建文件:");
            return 1;
        }
        if((chpid = fork() == 0)){
            puts("子进程正在运行\n");
            strcpy(buf, "子进程数据!");
            printf("子进程pid:%d\n", getpid());
            printf("父进程pid:%d\n", getppid());
            write(fd, buf, strlen(buf));
            close(fd);
            exit(0);
        }else{
            puts("父进程正在运行!\n");
            strcpy(buf, "父进程数据!");
            printf("子进程pid:%d\n", chpid);
            printf("父进程pid:%d\n", getpid());
            write(fd, buf, strlen(buf));
            close(fd);
        } 
        wait(&status);
        return 0;
    }
    
  2. 进程的执行、等待、同步
    进程中执行其他可执行程序时可用exec,等待其他进程执行完毕使用wait,进程间同步使用信号量,互斥量等,进程睡眠使用sleep
    #include<unistd.h>
    #include<stdio.h>
    extern char **environ;
    int main(int argc, char* argv[]){
        puts("输出执行参数:\n");
        for(int i = 0; i < argc; i++){
            printf("参数%d:%s\n", i, argv[i]);
        }
        puts("输出环境变量:\n");
        for(int i = 0;environ[i] != NULL; i++){
            printf("%s\n", environ[i]);
        }
        return 0;
    }
    
    #include<unistd.h>
    #include<stdio.h>
    extern char **environ;
    int main(int argc, char* argv[]){
        puts("first information\n");
        fflush(stdout);
        execve("beexec", argv, environ);
        puts("information two!");
        return 0;
    }
    
  3. 进程信息获取
    理解getuid,getgid,getpid,getppid调用的作用,以及chdir,chroot,nice
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,421评论 0 2
  • 信号信号是linux操作系统进程间通信的一种方式,一个应用进程可以接受、发送信号给另一个进程,当进程捕获到某个信号...
    zhile_doing阅读 496评论 0 0
  • 大纲 一.Socket简介 二.BSD Socket编程准备 1.地址 2.端口 3.网络字节序 4.半相关与全相...
    VD2012阅读 2,453评论 0 5
  • 第1章 第一个C程序第2章 C语言基础第3章 变量和数据类型第4章 顺序结构程序设计第5章 条件结构程序设计第6章...
    小狮子365阅读 10,733评论 3 71
  • 一切只是载体, 通往心灵的唯有信任与爱。 未来, 一座城,一定有个伊甸园, 让你有了家的感觉。 它是一个空间, 却...
    花子同学阅读 1,577评论 8 34