(二十三)进程——获取进程id相关函数的介绍和使用
来源:互联网 发布:淘宝卖家进入 编辑:程序博客网 时间:2024/06/04 23:28
上一节中我们知道怎么通过fork函数创建(或者说是复制)一个进程,但是我们要怎么样操作这个被创建出来的进程呢?那就需要用到他的进程id,所以就要获取进程id,一下提供一些获取进程id的函数和其使用方法。
1)getpid和gteppid
#include <sys/types.h>#include <unistd.h>pid_t getpid(void); //返回调用进程的PID号pid_t getppid(void); //返回调用进程父进程的PID号
例子:
#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <sys/types.h>int main(void){ pid_t pid; printf("this is a test\n"); /* *上面的语句如果没有\n那么就会在子进程中也打印一句 *这个是由于printf的机制造成的,遇到\n就出栈, *若没有\n那么会在执行下一条语句的时候前出栈, *而下一条语句是fork,此时已经复制主进程的环境,其中包括打印 */ pid = fork();//调用fork时,子进程会从下面的语句开始执行 if(pid > 0) { while(1) { printf("I am parent\n"); printf("parent's pid id %d\n",getpid()); printf("parent's father is %d\n\n",getppid()); sleep(2); } } else if(pid == 0) { while(1) { printf("I am child\n"); printf("child's pid id %d\n",getpid()); printf("child's father is %d\n\n",getppid()); sleep(2); } } else { perror("fork"); exit(1); } return 0;}
输出结果:
this is a testI am parentparent's pid id 4040parent's father is 3348I am childchild's pid id 4041child's father is 4040I am parentparent's pid id 4040parent's father is 3348I am childchild's pid id 4041child's father is 4040
2)getuid和geteuid
概念补充:
1、实际用户ID和实际用户组ID:标识我是谁。也就是登录用户的uid和gid,比如我的Linux以simon登录,在Linux运行的所有的命令的实际用户ID都是simon的uid,实际用户组ID都是simon的gid(可以用id命令查看)。
2、有效用户ID和有效用户组ID:进程用来决定我们对资源的访问权限。一般情况下,有效用户ID等于实际用户ID,有效用户组ID等于实际用户组ID。当设置-用户-ID(SUID)位设置,则有效用户ID等于文件的所有者的uid,而不是实际用户ID;同样,如果设置了设置-用户组-ID(SGID)位,则有效用户组ID等于文件所有者的gid,而不是实际用户组ID。
#include <unistd.h>#include <sys/types.h>uid_t getuid(void); //返回实际用户IDuid_t geteuid(void); //返回有效用户ID
例子:
#include <stdio.h>#include <unistd.h>#include <sys/types.h>/* uid_t getuid(void); //返回实际用户ID uid_t geteuid(void); //返回有效用户ID*/int main(void){ printf("实际用户ID = %d\n",getuid()); printf("有效用户ID = %d\n",geteuid()); return 0;}
输出结果:
实际用户ID = 1000有效用户ID = 1000
3)getgid和getegid
#include <unistd.h>#include <sys/types.h>gid_t getgid(void); //返回实际用户组IDgid_t getegid(void); //返回有效用户组ID
例子:
#include <stdio.h>#include <unistd.h>#include <sys/types.h>/* gid_t getgid(void); //返回实际用户组ID gid_t getegid(void); //返回有效用户组ID */int main(void){ printf("实际用户组ID = %d\n",getgid()); printf("有效用户组ID = %d\n",getegid()); return 0;}
输出结果:
实际用户组ID = 1000有效用户组ID = 1000
5 0
- (二十三)进程——获取进程id相关函数的介绍和使用
- 获取进程和线程id函数简介
- windows获取进程id和当前进程的会话id
- 进程的相关函数使用
- 进程的相关函数使用
- 第八章(二) exec系列函数 和 进程的几个ID的认识
- 使用编程方式获取当前Java进程的进程ID
- 获取当前进程ID和子线程的线程ID
- 进程的相关函数
- linux 打印相关 应用的进程,根据筛选条件 获取进程id 执行jstack 指令
- windows进程函数介绍【二】
- Windows Minifilter驱动 - 获取进程ID, 进程名字和线程ID (5)
- 与进程相关的几个ID,set-user-ID和set-group-ID
- 获取当前进程/线程的ID、句柄和内核地址
- 获取当前进程/线程的ID、句柄和内核地址
- linux下如何获取进程的id和命令行参数
- 进程相关ID
- 进程相关ID
- 证明Fesitel 结构的正确性
- Android 开发基础课程设计---手机文件管理系统
- ServletContext与Web应用范围
- Android View源码解读:浅谈DecorView与ViewRootImpl
- vs2012注册码
- (二十三)进程——获取进程id相关函数的介绍和使用
- java正则表达式
- python Nltk 自然语言安装包安装教程
- CentOS 7 安装KVM,并创建虚拟机
- SessionFactory.getCurrentSession与openSession的区别
- Android View 测量流程(Measure)完全解析
- 4-6 带头结点的链式表操作集 (20分)
- 电脑突然变成繁体字,格式化代码快捷键失灵
- 链接