进程控制小结
来源:互联网 发布:关于大数据的股票 编辑:程序博客网 时间:2024/05/29 18:17
1.1 进程标识
1.1.1 相关函数
pid_t getpid(void);
pid_t getppid(void);
pid_t getuid(void);
pid_t geteuid(void);
pid_t getgid(void);
pid_t getegid(void);
1.1.2 说明
上面这些函数分别用于获得当前进程的:进程ID、父进程ID、实际用户ID、有效用户ID、实际组ID和有效组ID。
1.2 创建子进程
1.2.1 相关函数
pid_t fork(void);
pid_t vfork(void);
1.2.2 说明
除了init等系统进程以外,创建进程的唯一方法就是调用fork函数。调用fork后,子进程完全复制父进程。对子进程,fork返回0;对父进程,fork返回子进程的pid。vfork并不复制父进程的进程空间,在子进程调用exec或者exit之前,子进程在父进程的进程空间运行。
1.2.3 文件共享
子进程继承了父进程打开的文件描述符及其文件位移量,所以可能产生冲突,需要进行同步,也可以父进程等待子进程完成或者父、子进程执行不同的程序段以避免冲突。
1.2.4 fork的用法
父进程希望复制自己,使父、子进程执行不同的代码段。
一个进程要调用一个不同的程序。
1.3 等待进程终止
1.3.1 相关函数
pid_t wait(int *status);
pid_t waitpid(pid_t pid, int *status,int options);
1.3.2 说明
status返回所等待进程的返回状态,可以用一系列的宏来检查这个状态。
调用这两个函数后,当前进程可能会:
阻塞(如果其所以子进程都还在运行)
带子进程的终止状态立刻返回(如果一个子进程以终止,正在等待父进程存取其终止状态)
出错立刻返回(如果它没有任何子进程)
1.3.3 区别
在一个子进程终止前,wait是其调用者阻塞,而waitpid有一选择项可以是调用者不阻塞。
waitpid并不等待第一个终止的子进程,它有选择项可以控制它所等待的进程。
1.4 执行程序
1.4.1 相关函数
int execve(const char *path, char *const argv [], char *const envp[]);
int execl(const char *path,const char *arg, ...);
int execlp(const char *file,const char *arg, ...);
int execle(const char *path, const char *arg , ..., char * const envp[]);
int execv(const char *path,char *const argv[]);
int execvp(const char *file,char *const argv[]);
1.4.2 区别
以上6个函数中execve时系统调用,其他的则是库函数。
根据函数名中的字符:
p表示该函数取文件名作为参数,并用PATH环境变量寻找可执行文件。没有字符p则表示参数为完全路径名。
l表示该函数取一个参数表,它和字符v互斥。v表示该函数取一个参数的数组argv[]。
e表示该函数取envp[]数组作为新程序的环境变量表,没有e则使用当前进程的环境变量表。
1.5 设置用户ID和组ID
1.5.1 相关函数
int setuid(uid_t uid);
int setgid(uid_t gid);
int seteuid(uid_t euid);
int setegid(gid_t egid);
int setreuid(uid_t ruid, uid_teuid);
int setregid(gid_t rgid, gid_tegid);
1.5.2 规则
关于用setuid函数改变用户ID的规则(也同样适用于setgid函数):
若进程具有root特权,则setuid把RUID、EUID以及SUID都设置为uid。
若进程没有root权限,但uid等于RUID或者SUID,则把EUID设置为uid。
上述条件都不满足,则返回出错,errno设为EPERM。
1.6 执行shell程序
1.6.1 相关函数
int system(const char *cmd);
1.6.2 说明
相当于执行/bin/sh –c cmd.
对于有suid和sgid权限的程序不能使用此函数,会产生安全漏洞。
1.7 用户标识
1.7.1 相关函数
char *getlogin(void);
1.7.2 说明
得到运行该程序的用户的登录名。对于未连接到终端的进程,本函数会失败。
1.8 进程时间
1.8.1 相关函数
clock_t times(struct tms *buf);
1.8.2 说明
用于得到进程自己以及终止子进程的用户CPU时间和系统CPU时
- 进程控制小结
- 关于学习进程控制和线程控制的小结
- 进程小结
- 进程控制
- 进程控制
- 进程控制
- 进程控制
- 进程控制
- 进程控制
- 进程控制
- 进程控制
- 进程控制
- 进程控制
- 进程控制
- 进程控制
- 进程控制
- 进程控制
- 进程控制
- 通过修改注册表实现Windows 隐藏账户
- SVN服务器安装与配置
- 网页上加上 页浮动广告的一段JS就不管用,是doctype的原因
- 大型网站架构演变过程
- Flex和.NET协同开发利器FluorineFx Flex与.NET互操作http://www.jb51.net/article/18588.htm
- 进程控制小结
- 该项不适于在指定状态下使用
- MYSQL 的 primary key 和unique key 的区别
- J2ME字符串split方法
- 视频播放代码
- 0/1背包问题-回溯法
- Linux进程间通信的方法
- 制作可执行的JAR文件包及jar命令详解zt
- Hibernate映射类型对照表