zoukankan      html  css  js  c++  java
  • 进程控制函数(2)-setpgid() 修改当前进程的进程组ID

    定义:
    int setpgid(pid_t pid,pid_t pgid);


    表头文件:
    #include<unistd.h>


    说明:
    setpgid()将参数pid 指定进程所属的组识别码设为参数pgid 指定的组识别码。如果参数pid为0, 则会用来设置目前进程的组识别码, 如果参数pgid为0, 则会以目前进程的进程识别码来取代。

    返回值:
    执行成功则返回组识别码, 如果有错误则返回-1, 错误原因存于errno中。


    相关函数:
    getpgid, setpgrp, getpgrp


    错误代码:
    EINVAL 参数pgid小于0。
    EPERM 进程权限不足, 无法完成调用。
    ESRCH 找不到符合参数pid指定的进程。

    示例代码:

    #include <unistd.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    
    
    int main()
    {
        pid_t pid;
        
        if ((pid = fork()) < 0) {
            perror("fork");
            exit(1);
        } else if (pid == 0) {
            printf("child process PID is: %d
    ", getpid());
            printf("child process PGID is: %d
    ", getpgrp());
            sleep(5);
            printf("child process PGID is: %d
    ", getpgrp());
            exit(0);
        }
        
        sleep(1);
        // 改变子进程的组ID为子进程本身
        setpgid(pid, pid);    
        sleep(5);
        
        printf("parent process PID is:  %d
    ", getpid());
        printf("parent process PPID is: %d
    ", getppid());
        printf("parent process PGID is: %d
    ", getpgrp());
        setpgid(getpid(), getppid()); // 改变父进程的组ID为父进程的父进程
        printf("parent process PGID has changed to: %d
    ", getpgrp());
        return 0;
    }

    运行结果:

    child process PID is: 4932
    child process PGID is: 4931
    child process PGID is: 4932
    parent process PID is: 4931
    parent process PPID is: 3486
    parent process PGID is: 4931
    parent process PGID has changed to: 3486

  • 相关阅读:
    windbg条件断点总结
    使用openssl命令剖析RSA私钥文件格式
    RSA读取密钥——使用openssl编程
    OPENSSL中RSA私钥文件(PEM格式)解析【一】
    电商系统架构——系统鸟瞰图
    构建高并发高可用的电商平台架构实践
    一些PHP性能的优化
    CentOS的Gearman安装
    php安装gearman扩展实现异步分步式任务
    使用 Gearman 实现分布式处理
  • 原文地址:https://www.cnblogs.com/yongdaimi/p/8192827.html
Copyright © 2011-2022 走看看