一、进程相关
1. 进程ID
头文件#include<cunistd>(c++文件,c源文件为#include<unistd.h>)
getpid( ) 获取当前进程的 ID
getppid( ) 获取当前进程的父进程ID
getpgrp( ) 获取当前进程的进程组ID
getuid( ) 获取当前进程的实际用户ID
getgid( ) 获取当前进程的实际用户组ID
geteuid( ) 获取当前进程的有效用户ID
getegid( ) 获取当前进程的有效用户组ID
getsid( pid ) 获取指定进程的会话ID
setpgid( pid, pgid ) 将pid指向的进程加入到pgid所指向的进程组 返回0表示调用成功 返回-1表示调用失败
nice( inc ) 指定新的优先级,inc取之为 -20~19,返回0表面调用成功,返回-1表示调用失败
2. 进程的环境变量
头文件#include<cstdlib>(若为c源文件则为#include<stdlib.h>)
string getenv( string str) 类似shell中的$环境变量,返回NULL表示环境变量为定义,否则返回环境变量的值。getenv(“PATH”) 则返回环境变量PATH的值
int putenv(string str) 类似shell中export的作用,返回0表示调用成功,返回-1表示调用失败。
3. 创建新的进程
fork( )
调用fork( ) 函数有两次返回,在父进程中返回子进程的标识符,在子进程中返回0。
子进程将继承父进程的以下几个属性:
进程的实际用户ID,实际用户组ID,有效用户ID,有效用户组ID
进程组ID,会话ID,控制终端
当前工作目录,根目录
文件创建掩码UMASK,环境变量
子进程不会继承父进程的以下属性:
子进程的用户时间和系统时间,都初始化为0
子进程的超时时钟设置为0
父进程的记录锁
子进程可以直接使用父进程已打开的文件描述符,包括文件描述符、套借口描述符等,这些描述符的计数会自动加1
子进程复制了父进程的数据段,所以更改子进程的全局变量数据并不能实现进程间通信
system()
system(string str ) 用来加载外部的可执行程序,执行完毕后返回当前进程,其中str表示外部程序的文件名。返回-1标识执行失败,可以从errno中获取错误信息;返回127表示执行失败,若errno为0表示调用system调用成功,被加载程序失败,若errno不为0标识调用system失败;返回其他标识执行成功
exec系列函数
exec系列函数不创建新的进程,即调用exec前后的进程ID不变。该函数先清除父进程的可执行代码映像,用心程序的代码覆盖原进程代码,并从新程序的main函数入口开始执行
4、终止进程
exit(int status) 退出进程,并返回返回码status,可以在父进程中用wait函数获取
wait() 等待子进程退出并获取子进程的返回码