• LinuxC——4.进程控制


    LinuxC——4.进程控制

    1.PID

    pid是进程id,id为0是系统调度进程,id为1是初始化进程

    #include <sys/types.h>
    #include <unistd.h>
    
    pid_t getpid(void); // 进程id
    ppid_t getppid(void); // 父进程id
    uid_t getuid(void); // 用户id
    gid_t getgid(void); // 用户组id
    

    2.fork

    fork函数是父亲进程进行拷贝父进程内存空间。

    父进程返回子进程pid

    子进程成功返回0,失败返回-1

    #include <unistd.h>
    pid_t fork(void)
      
    #include <stdlib.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    int main(void) {
            pid_t ret = 0;
            ret = fork();
            if(ret > 0) {
                    int fd = 0;
                    fd = open("./a.txt", O_RDWR|O_CREAT, 0664);
                    write(fd, "hello
    ", 6);
            } else if(ret == 0) {
                    int fd = 0;
                    fd = open("./a.txt", O_RDWR|O_CREAT, 0664);
                    write(fd, "hello
    ", 6);
            }
            return 0;
    }
    // 对同一个文件操作,会覆盖
    

    3.exec加载器

    我们如果一直在if和else if中控制进程,那么会臃肿,我们使用exec加载器进行解决这个问题。

    int execve(const char *filename, char **const argv, char **const envp)
      
    filename 可执行文件名
    argv 参数
    envp 环境变量表
      
    extern char **environ; // 进程环境变量表
    

    4.system函数

    进行操作系统函数

    int system(const char* command)
    

    5.回收进程资源

    进程结束,程序的资源被释放。父进程会进行释放子进程资源

    • 僵尸进程:子进程终止,父进程还活着,没有释放子进程资源,所以子进程成了僵尸进程
    • 孤儿进程:父亲死了,子进程成了孤儿进程

    6.wait函数

    pid_t wait(int *status);
    获取子进程的终止状态
    WIFEXITED(status); 
    查看终止原因
    WIFSIGNALED(status)
    终止信号提取
    
  • 相关阅读:
    iOS中的NSTimer 和 Android 中的Timer
    正则表达式中*的使用小注意
    NSUrlConnection 和 NSUrlRequest 的关系
    iOS 中的第三方库管理工具
    Android 向Application对象添加Activity监听
    Android dp px转化公式
    Android 返回桌面的Intent
    Spring+SpringMVC+Hibernate小案例(实现Spring对Hibernate的事务管理)
    Equinox OSGi应用嵌入Jersey框架搭建REST服务
    在OSGI容器Equinox中嵌入HttpServer
  • 原文地址:https://www.cnblogs.com/littlepage/p/12670869.html
Copyright © 2020-2023  润新知