进程控制函数(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()) < ) {
perror("fork");
exit();
} else if (pid == ) {
printf("child process PID is: %d\n", getpid());
printf("child process PGID is: %d\n", getpgrp());
sleep();
printf("child process PGID is: %d\n", getpgrp());
exit();
} sleep();
// 改变子进程的组ID为子进程本身
setpgid(pid, pid);
sleep(); printf("parent process PID is: %d\n", getpid());
printf("parent process PPID is: %d\n", getppid());
printf("parent process PGID is: %d\n", getpgrp());
setpgid(getpid(), getppid()); // 改变父进程的组ID为父进程的父进程
printf("parent process PGID has changed to: %d\n", getpgrp());
return ;
}
运行结果:
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
进程控制函数(2)-setpgid() 修改当前进程的进程组ID的更多相关文章
- 进程的基本属性:进程ID、父进程ID、进程组ID、会话和控制终端
摘要:本文主要介绍进程的基本属性,基本属性包含:进程ID.父进程ID.进程组ID.会话和控制终端. 进程基本属性 1.进程ID(PID) 函数定义: #include <sys/typ ...
- 修改Jenkins启动衍生进程的生命周期
Jenkins+jmeter 多线程测试java接口时爆错,导致无法生成html报告. 先介绍下场景: 在Jenkins中新建了一个Job,假设你在一些列Build Step之前/之后,启动了一个进程 ...
- Linux系统编程(8)—— 进程之进程控制函数fork
fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事. 一个进程调用fork()函数后,系统先 ...
- 修改RedHat 7.2 进程最大句柄数限制
RedHat对进程打开文件句柄数主要通过设置全局值和登陆用户分别管理.其中/proc/sys/fs下设置全局最大文件句柄数和用户进程能打开的最大文件句柄数,这两个参数一般情况下不需要修改. 对于普通用 ...
- 修改ActiveProcessLinks链表隐藏进程
在Windows内核中有一个活动进程链表AcvtivePeorecssList.它是一个双向链表,保存着系统中所有进程的EPROCESS结构.特别地,进程的EPROCESS结构包含一个具有指针成员FL ...
- 进程控制函数(3)-getsid()和setsid()获取当前会话和建立新会话
pid_t setsid(void) 1.调用进程不能是进程组组长,该进程变成新会话首进程(session header) 2.该进程成为一个新进程组的组长进程. 3.需有root权限(ubuntu不 ...
- linux进程控制函数详解
进程控制 fork函数 创建一个子进程. pid_t fork(void); 失败返回-1:成功返回:① 父进程返回子进程的ID(非负) ②子进程返回 0 pid_t类型表示进程ID,但为了表示-1, ...
- 1.2 Linux中的进程 --- fork、vfork、exec函数族、进程退出方式、守护进程等分析
fork和vfork分析: 在fork还没有实现copy on write之前,Unix设计者很关心fork之后立即执行exec所造成的地址空间浪费,也就是拷贝进程地址空间时的效率问题,所以引入vfo ...
- 进程(并发,并行) join start 进程池 (同步异步)
一.背景知识 顾名思义,进程即正在执行的一个过程.进程是对正在运行程序的一个抽象.进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一.操作系统的其他所有 ...
随机推荐
- OpenCV学习(6) 文件和Mat之间的数据交换
有时候为了便于调试算法,我们需要从文本文件或二进制文件中读取数据,并把数据放到相应的矩阵中去.我们通常可以通过下面的函数实现. 1.从二进制文件中读取数据. 新建一个txt文 ...
- [置顶] JDK工具(零)--简要介绍JDK1.6自带的42个工具
Java的开发人员肯定都知道JDK的bin目录中有“java.exe”和“javac.exe”这两个命令行工具, 但并非所有的Java程序员都了解过JDK的bin目录之中其它命令行程序的作用. JDK ...
- 比较String.substring()、String.slice()、String.substr()的区别
String.substring().String.slice().String.substr()这三者都能从String字符串中截取一部分,那么它们在使用上有什么不同么? 一.slice() 方法提 ...
- Unable to lock the administration directory (/var/lib/dpkg/),is another process using it?
Description:无法获得锁 /var/lib/dpkg/lock - open (11 Resource temporarily unavailable)Unable to lock the ...
- Xamarin C# Android for Windows 安装
Xamarin C# Android for Windows 安装 Xamarin的. Android手动安装 安装Xamarin的 Android在Windows机器上 大多数时候,Xama ...
- 退出app 退出应用程序
退出app的两种方式1 创建activity的基类,让所有的activity都继承该基类,在基类中创建一个静态的activity列表,并在oncreate方法添加该activity,在退出时,遍历 ...
- gsoap
C++中如何使用gsoap开发WebService 1. 什么是gSOAPgSOAP是一个夸平台的,用于开发Web Service服务端和客户端的工具,在Windows.Linux.MAC OS和UN ...
- Unity发布各平台路径
#if UNITY_EDITOR string filepath = Application.dataPath + "/StreamingAssets"; #elif UNITY_ ...
- react-router-dom Link search 传参
<Link> 和之前版本没太大区别,重点看下组件属性: to(string/object):要跳转的路径或地址: replace(bool):为 true 时,点击链接后将使用新地址替换掉 ...
- vue 父子组件传值的另外一种方式 provide inject
1.文档说明 https://cn.vuejs.org/v2/api/#provide-inject 2.实例 element ui的dropdown组件 dropdown.vue: provide( ...