(二十三)进程——获取进程id相关函数的介绍和使用
2017-01-06 18:49
811 查看
上一节中我们知道怎么通过fork函数创建(或者说是复制)一个进程,但是我们要怎么样操作这个被创建出来的进程呢?那就需要用到他的进程id,所以就要获取进程id,一下提供一些获取进程id的函数和其使用方法。
例子:
输出结果:
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。
例子:
输出结果:
例子:
输出结果:
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 test I am parent parent's pid id 4040 parent's father is 3348 I am child child's pid id 4041 child's father is 4040 I am parent parent's pid id 4040 parent's father is 3348 I am child child's pid id 4041 child'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); //返回实际用户ID uid_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); //返回实际用户组ID gid_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
相关文章推荐
- 编写一个程序,使用getpid函数来获取当前进程的进程ID
- 获取系统运行进程信息——PSAPI介绍使用 .
- PHP获取字段长度相关函数使用技巧
- ActivityManager的初步使用——获取进程、Service、Activity、App的相关信息
- JavaScript中如何使用cookie实现记住密码功能及cookie相关函数介绍
- 进程序名得到进程ID和句柄与进程的公司名(使用快照和GetPeFileCompany和VerQueryValueW等函数)
- 获取进程和线程id函数简介
- C语言中操作进程信号的相关函数使用详解
- 使用gethostname()函数和gethostbyname()函数获取主机相关信息
- Cordova各个插件使用介绍系列(六)—$cordovaDevice获取设备的相关信息
- 获取系统运行进程信息——PSAPI介绍使用
- 进程相关(进程Id获取主窗口)
- PHP获取字段长度相关函数使用技巧
- 使用ptrace向已运行进程中注入.so并执行相关函数
- 进程的相关函数使用
- 使用ptrace向已运行进程中注入.so并执行相关函数
- 使用ptrace向已运行进程中注入.so并执行相关函数
- 以实例全面讲解PHP中多进程编程的相关函数的使用
- 信号相关函数的介绍及使用
- C语言可变参数函数的使用及相关函数介绍